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参数
value | meaning |
---|---|
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 | 激活并显示一个窗口。如果窗口最小化或最大化,则系统会将其还原到其原始大小和位置。首次显示窗口时,应用程序应指定此标志。 |