用vc6生成win32对话框程序的简单方法

本文介绍了如何使用Visual C++ 6.0(vc6)创建一个Win32对话框程序。首先选择Win32 Application项目模板,生成默认的“hello, world”程序,然后删除WinMain中的部分代码,替换为CreateDialog函数,以显示非模态对话框。通过设置对话框回调函数About,处理WM_COMMAND消息以实现关闭对话框的功能。在遇到自定义控件如进度条时,需要引入commctrl.h,链接comctl32.lib,并调用InitCommonControls()初始化。然而,文章作者在使用API控制进度条方面遇到了困难。" 88599810,7949283,LeetCode:文件系统最长绝对路径解析,"['算法', '数据结构', '字符串处理', '编程问题', 'LeetCode挑战']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在project选择 win32 Application,然后选择自动生成一个“hello,world”程序,就可以的到一个普通窗口的对话框,而且带一个about对话框。
接着,删掉WinMain里的大部分代码,添加一个CreateDialog函数调用,如下:
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
 MSG msg;
 // 创建主对话框,用CreateDialog创建的是非模态对话框,而DialogBox则是模态对话框,自己参考MSDN
HWND hMain = NULL;
 hMain = CreateDialog( hInstance, (LPCTSTR)( IDD_ABOUTBOX ), NULL, (DLGPROC)About );
 ::SetWindowPos( hMain, HWND_TOP, 250,200, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);
// ShowWindow( hMain, SW_SHOW) // 有了上边一句,这个就不用啦
 ::UpdateWindow( hMain );

 if( NULL == hMain )
 {
  ::MessageBox( NULL, "CreateWindow error", "error", MB_OK );
  return -1;
 }
 // Main message loop:
 while (GetMessage(&msg, NULL, 0, 0))
 {
  if( !::IsDialogMessage( hMain, &msg ) )
  {
   TranslateMessage(&msg);
   DispatchMessage(&msg);
  }
 }

 return msg.wParam;
}
这样,就运行的时候就可以看到一个对话框了,但是有个问题,点击关闭对话框的时候,对话框并没有真正关闭,还需要修改一个小地方,在消息处理的回调函数About里,需要加上这个:
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
 switch (message)
 {
  case WM_INITDIALOG:
    return TRUE;

  case WM_COMMAND:
   if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
   {
//    EndDialog(hDlg, LOWORD(wParam)); //这个是在用DialogBox创建的模态对话框才需要用到,用了也没关系
    PostQuitMessage( 0 ); // 这样才会完全退出
    return TRUE;
   }
   break;
  case WM_DESTROY:
   PostQuitMessage(0);
 }
    return FALSE;
}
最后,如果对话框模版里用到了不一般的控件(比如进度条),还需要
1 引用头文件:#include <commctrl.h>
2 并链接comctl32.lib,
3 在WinMain中创建对话框前调用InitCommonControls();
最后我本来想在对话框里加个进度条的,但是,不知道到如何用win32Api来控制它,有点郁闷,有知道的希望能够留言,谢谢

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值