#include
<windows.h>
#include
"resource.h"
HWND hwnd_B;
HINSTANCE g_hInstance;
//
函数声明
LRESULT CALLBACK Proc_A(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK Proc_B(HWND , UINT, WPARAM , LPARAM );
//
主函数
int
APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
g_hInstance = hInstance;
HWND hwnd_A = CreateDialog(g_hInstance,(LPCTSTR)(IDD_DIALOG_MAIN),NULL,(DLGPROC)Proc_A);
::SetWindowPos(hwnd_A, HWND_TOP, 250,200,540, 310, SWP_SHOWWINDOW);
::UpdateWindow(hwnd_A);
MSG msg;
if( NULL == hwnd_A )
{
::MessageBox( NULL, "CreateWindow error", "error", MB_OK );
return -1;
}
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//
回调函数A
LRESULT CALLBACK Proc_A(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
{
return TRUE;
}
case WM_COMMAND:
{
if (LOWORD(wParam) == IDOK)
{
hwnd_B = CreateDialogA( g_hInstance,
(LPCTSTR)(IDD_DIALOG_STUDENT),
hDlg,
(DLGPROC)Proc_B);
::ShowWindow(hwnd_B,SW_SHOW);
::UpdateWindow(hwnd_B);
return TRUE;
}
if (LOWORD(wParam) == IDCANCEL)
{
PostQuitMessage(0);
return TRUE;
}
}
case WM_DESTROY:
PostQuitMessage(0);
}
return FALSE;
}
//
回调函数B
LRESULT CALLBACK Proc_B(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
{
return TRUE;
}
case WM_COMMAND:
{
if (LOWORD(wParam) == IDOK)
{
return TRUE;
}
if (LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(hwnd_B));
return TRUE;
}
}
case WM_DESTROY:
PostQuitMessage(0);
}
return FALSE;
}
|
代码如上,令我不解的是最后一行的return FALSE 。
起初我不小心写成了return TRUE ,紧接着问题就来了,显示的子窗口只有按钮被绘制,其余部分都是原来屏幕的内容。
调用
::UpdateWindow(hwnd_B); 问题依旧。
主窗口只能被拖动,不响应任何消息(我明明用的是非模态对话框)。子窗口的其他分支返回 TRUE 就可以,百思不得其解,究竟这个返回值意味着什么呢?windows在回调函数返回后干了些什么呢?希望有高手为我解惑。