显示非模式对话框实例

本文介绍了如何使用API函数CreateDialog和CreateDialogParam来创建非模式对话框。非模式对话框关闭时需调用DestroyWindow,而不是EndDialog。首次启动会收到WM_INITDIALOG消息。如果未设置WS_VISIBLE,需要通过ShowWindow显示。在Win32项目中创建非模式对话框资源,并在WinMain函数中处理消息循环以避免程序立即退出。非模式对话框不处理WM_CREATE消息,通常需要在结束前调用PostQuitMessage。

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

使用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函数中都是一个循环,

以持续完成需要的工作。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值