显示非模式对话框实例

来源:互联网 发布:大麦盒子官网软件 编辑:程序博客网 时间:2024/05/23 21:18

使用API函数CreateDialog和CreateDialogParam。

结束非模式对话框使用DestroyWindow函数,而不是EndDialog函数。

非模式对话框建立后收到的第一条消息任然是WM_INITDIALOG。

如果资源中没有指定WS_VISIBLE属性,则非模式对话框创建后不会立刻显示出来,要调用Showwindow函数才能让其显示。

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

新建简单的Win32项目ModallessDlg

向工程添加一个对话框资源,其ID为IDD_MAIN

将系统自动生成的ModallessDlg.cpp文件修改如下:

#include "tchar.h"#include "resource.h"///对话框过程,处理各种消息BOOL CALLBACK DlgProc(HWND hwndDlg ,UINT uMsg ,WPARAM wParam ,LPARAM lParam){switch(uMsg){case WM_CREATE:OutputDebugString(_T("收到了WM_Create消息\n"));break;case WM_INITDIALOG:OutputDebugString(_T("收到了WM_InitDialog消息\n"));break;case WM_COMMAND:switch(LOWORD(wParam)){case IDOK:break;case IDCANCEL:DestroyWindow(hwndDlg);//EndDialog(hwndDlg , 1);return true;}break;case WM_CLOSE:DestroyWindow(hwndDlg);//EndDialog(hwndDlg , 0);return true;case WM_DESTROY:OutputDebugString(_T("对话框即将被销毁\n"));PostQuitMessage(0);return true;default:break;}return false;}int APIENTRY WinMain(HINSTANCE hInstance,                     HINSTANCE hPrevInstance,                     LPSTR     lpCmdLine,                     int       nCmdShow){ // TODO: Place code here.///创建非模式对话框
HWND hWnd = CreateDialogParam(hInstance,MAKEINTRESOURCE(IDD_MAIN) ,NULL ,DlgProc ,0);///显示对话框
ShowWindow(hWnd ,SW_SHOW);MSG msg ={0};while(GetMessage(&msg,NULL,0,0)){DispatchMessage(&msg);}OutputDebugString(_T("结束了\n"));return 0;}



说明:

1、非模式对话框必须在WinMain函数中加上消息循环的处理,否则应用程序会立即退出。

2、若非模式对话框做主窗体,则必须在对话框结束前调用PostQuitMessage函数以投递结束消息循环的消息。

3、非模式对话框也处理不到WM_CREATE消息。

******************************************************************************************

WM_CLOSE,调用DestroyWindow()                                                     **DestroyWindow()又发送WM_DESTROY                                                **响应WM_DESTROY,调用WM_QUIT                                                    **GetMessage()发现WM_QUIT,退出程序                           **

******************************************************************************************

可以看出,程序一旦退出main(WinMain)函数,应用程序即会结束,所以在实际应用中大多数程序的main函数中都是一个循环,

以持续完成需要的工作。

 

原创粉丝点击