CSDN博客

img devonzzb

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

发表于2004/10/26 14:30:00  6792人阅读

分类: 编程相关

在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来控制它,有点郁闷,有知道的希望能够留言,谢谢

阅读全文
0 0

相关文章推荐

img
取 消
img