非模态对话框

1.非模态对话框

  • 模态对话框用DialogBox来创建,EndDialog来关闭
    非模态对话框用CreateDialog来创建,DestroyWindow来关闭
hChatDlg = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_CHAT_DLG), hWnd, ChatProc);
DestroyWindow(hChatDlg);
  • 注意:
    非模态对话框中,DestroyWindow关闭非模态对话框, EndDialog隐藏对话框,模态对话框中, EndDialog是关闭对话框

2.创建非模态对话框

处理函数声明
HINSTANCE g_hInstance;

//非模态对话框处理函数
BOOL CALLBACK DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
//窗口处理函数
BOOL CALLBACK ChatProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
主函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
	g_hInstance = hInstance;
	
	//创建主窗口DialogProc为模态对话框
	DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN_DLG), NULL, DialogProc);
	return 0;
}
处理函数
非模态对话框处理函数
BOOL CALLBACK DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	static HWND hChatDlg = NULL;

	switch (uMsg)
	{
	//命令消息
	case WM_COMMAND:
		{
			int wID = LOWORD(wParam);
			switch (wID)
			{
			case IDC_BTN_CHAT:
				{
					hChatDlg = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_CHAT_DLG), hWnd, ChatProc);
					ShowWindow(hChatDlg, SW_SHOW);
					break;
				}
			case IDC_BTN_CLOSE:
				{				
					//非模态对话框中,EndDialog是隐藏对话框,
					EndDialog(hChatDlg, IDCANCEL); //最小化ChatProc窗口
					break;
				}
			case IDC_BTN_SHOW:
				{
					if (hChatDlg)
						ShowWindow(hChatDlg, SW_SHOW);	//正常显示ChatProc窗口
					break;
				}
			}
		}
		break;
	//窗口关闭消息
	case WM_CLOSE:
		EndDialog(hWnd, IDOK);
		break;
	}

	return FALSE;
}
窗口处理函数
//窗口处理函数
BOOL CALLBACK ChatProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_CLOSE:
		DestroyWindow(hWnd);
		break;
	}
	return FALSE;
}

ShowWindow函数详解

  • 设置指定窗口的显示状态。
BOOL ShowWindow(
  HWND hWnd,	  //窗口的句柄
  int  nCmdShow   //控制窗口的显示方式。
);

nCmdShow参数

valuemeaning
SW_FORCEMINIMIZE最小化一个窗口,即使拥有该窗口的线程没有响应。仅当最小化来自其他线程的窗口时,才应使用此标志。
SW_HIDE隐藏该窗口并激活另一个窗口。
SW_MAXIMIZE最大化指定的窗口。
SW_MINIMIZE最小化指定的窗口并以Z顺序激活下一个顶级窗口。
SW_RESTORE激活并显示窗口。如果窗口最小化或最大化,则系统会将其还原到其原始大小和位置。恢复最小化窗口时,应用程序应指定此标志。
SW_SHOW激活窗口并以其当前大小和位置显示它。
SW_SHOWDEFAULT根据启动应用程序的程序传递给CreateProcess函数的STARTUPINFO结构中指定的SW_值设置显示状态。
SW_SHOWMAXIMIZED激活窗口并将其显示为最大化窗口。
SW_SHOWMINIMIZED激活窗口并将其显示为最小化窗口。
SW_SHOWMINNOACTIVE将窗口显示为最小化窗口。该值类似于SW_SHOWMINIMIZED,除了未激活窗口。
SW_SHOWNA以当前大小和位置显示窗口。该值类似于SW_SHOW,除了未激活窗口。
SW_SHOWNOACTIVATE以最近的大小和位置显示窗口。该值与SW_SHOWNORMAL相似,除了不激活窗口。
SW_SHOWNORMAL激活并显示一个窗口。如果窗口最小化或最大化,则系统会将其还原到其原始大小和位置。首次显示窗口时,应用程序应指定此标志。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值