//消息处理函数
INT CALLBACK DialogueProc(HWND hDlgWnd, UINT msgID, WPARAM wParam, LPARAM lParam)
{
switch (msgID)
{
case WM_SYSCOMMAND:
if (LOWORD(wParam) == SC_CLOSE)
EndDialog(hDlgWnd, FALSE);
break;
}
return FALSE;
}
//处理WM_COMMMAND时的代码
void Fun(HWND hWnd)
{
DialogBox(g_hIns, (char*)IDD_DIALOG1, hWnd, DialogueProc);
}
void OnCommand(HWND hWnd, WPARAM wParam)
{
switch (LOWORD(wParam))
{
case ID_EDIT_NEW:
Fun(hWnd);//产生当前消息后的处理函数
break;
case ID_EDIT_DELETE:
MessageBox(hWnd, "DEL", "TIP", MB_OK);
break;
}
}
DestroyWindow顾名思义是销毁窗口的函数,但是在销毁对话框(也是一种窗口)时却一定要使用EndDialog。为什么呢?
我们来对比一下两者的功能:
DestroyWindow的功能是销毁窗口;而EndDialog的功能是销毁窗口并使之返回一个由EndDialog第二个参数指定的值。很明显,差别在是否返回值。
我(由于水平太菜)不能了解其内部实现过程,但可以这么去理解。DestroyWindow在被调用后会向目标窗口发送WM_DESTROY,WM_NCDESTROY暴力拆解窗口,这会导致本进程始终在堵塞状态。
而EndDialog则温柔一点,会先使DialogBox返回值,使其不再堵塞。也就可以顺利结束对话框