目录
一般使用模态对话框作为主窗口,非模态对话框作为子窗口。
在非模态中:
DestroyWindow(hChat); //关闭
EndDialog(hChat, 88); //隐藏
在模态中:(应该是,这里还没验证)
DestroyWindow(hChat); //关闭
EndDialog(hChat, 88); //关闭
一 非模态对话框作为主窗口时
1.1 成功了却没有显示
原因,没有show出来
应该改成
HWND hMain=CreateDialog(hInstance, MAKEINTRESOURCE(IDD_MAIN_DIA), NULL, DialogProc);
ShowWindow(hMain,SW_SHOW);
1.2 这里可以显示窗口了,但是却一闪而过
作为主窗口,应有个消息循环,并且处理好窗口关闭消息:
1.3 完整代码
#include<Windows.h>
#include"resource1.h"
INT_PTR CALLBACK DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreHinstance, LPSTR lpCmdLine, int nCmdShow)
{
//非模态对话框
HWND hMain=CreateDialog(hInstance, MAKEINTRESOURCE(IDD_MAIN_DIA), NULL, DialogProc);
ShowWindow(hMain, SW_SHOW);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
INT_PTR CALLBACK DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return FALSE;
}
二 非模态对话框作为子窗口时
2.1 关闭效果(使用DestroyWindow时)
2.2 隐藏效果(使用EndDialog时)
2.3 代码
#include<Windows.h>
#include"resource.h"//别忘记包含资源文件
HINSTANCE g_hInstance;
//模态对话框处理函数
INT_PTR CALLBACK DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
//非模态对话框处理函数
INT_PTR CALLBACK ChatProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreHinstance,LPSTR lpCmdLine,int nCmdShow)
{
g_hInstance = hInstance;
//模态对话框
DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN_DIA), NULL, DialogProc);
return 0;
}
//模态主窗口处理函数
INT_PTR CALLBACK DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static HWND hChat = NULL;
switch (uMsg)
{
case WM_COMMAND:
{
int wID = LOWORD(wParam);
switch (wID)
{
case IDC_BTN_CHAT:
{
hChat = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_CHAT_DIA), NULL, ChatProc);
ShowWindow(hChat, SW_SHOW);
break;
}
case IDC_BTN_CLOSE:
{
//DestroyWindow(hChat); //关闭
EndDialog(hChat, 88); //隐藏
break;
}
case IDC_BTN_SHOW:
{
if(hChat)
ShowWindow(hChat, SW_SHOW);
break;
}
}
break;
}
case WM_CLOSE:
EndDialog(hWnd,0);//
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return FALSE;
}
//非模态聊天框处理函数
INT_PTR CALLBACK ChatProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CLOSE:
DestroyWindow(hWnd);
break;
}
return FALSE;
}