显示非模式对话框实例
使用API函数CreateDialog和CreateDialogParam。
结束非模式对话框使用DestroyWindow函数,而不是EndDialog函数。
非模式对话框建立后收到的第一条消息任然是WM_INITDIALOG。
如果资源中没有指定WS_VISIBLE属性,则非模式对话框创建后不会立刻显示出来,要调用Showwindow函数才能让其显示。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
新建简单的Win32项目ModallessDlg
向工程添加一个对话框资源,其ID为IDD_MAIN
将系统自动生成的ModallessDlg.cpp文件修改如下:
[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.
///创建非模式对话框
[cpp]
HWND hWnd = CreateDialogParam(hInstance,MAKEINTRESOURCE(IDD_MAIN) ,NULL ,DlgProc ,0);
///显示对话框
[cpp]
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函数中都是一个循环, www.zzzyk.com
以持续完成需要的工作。
补充:软件开发 , C++ ,