2017-07-27 98 views
0

我從子窗口如何使用WM_CLOSE關閉子窗口?

m_childHwnd = CreateWindowEx(
NULL, 
TEXT("STATIC"), TEXT("childW"), 
WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_VISIBLE, 
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 
m_parentHWnd, NULL, 
GetModuleHandle(NULL), NULL 
); 

m_childhProc = (WNDPROC)SetWindowLongPtr(m_childHwnd , GWLP_WNDPROC, (LONG_PTR)WndChildProc); 

static LRESULT CALLBACK WndChildProc(HWND hwnd, UINT message, WPARAM wParam, 
LPARAM lParam) 
{ 
switch (message) 
{ 
case WM_CLOSE: 
    DestroyWindow(hwnd); 
return 0; 
case WM_DESTROY: 
    PostQuitMessage(0); 
    break; 
} 
default: 
    return CallWindowProc(m_childhProc, hwnd, message, wParam, lParam); 
} 

我希望當我按下子窗口的關閉按鈕的消息WM_CLOSE將觸發創建子hwnd與關閉按鈕手柄彈出消息和WndchildProc。我可以用這種方法關閉子女hwnd

但是,當按下兒童hwnd的關閉按鈕時,什麼也沒有發生。如果關閉按鈕parent-hwnd按下,則WM_DESTROY消息觸發。 因此,我無法用其關閉按鈕關閉(僅)子窗口。

如何使用關閉按鈕關閉子窗口?

更新:複製中缺少文本,添加:CallWindowProc默認情況下。

+7

您的窗口過程需要調用所有其他情況下的默認窗口過程。 – EJP

+1

子窗口是具有'WS_CHILD'風格的窗口。你的問題沒有。我沒有關注,你試圖解決什麼問題。此外,現在是時候將舊的(危險的)方法拋棄到子類控件,並改爲使用提供的基礎結構(請參見[子類化控件](https://msdn.microsoft.com/zh-cn/library/windows/desktop /bb773183.aspx))。 – IInspectable

回答

0

當點擊關閉按鈕時,我發現解決方案的事件WM_NCLBUTTONUP觸發器。

case WM_NCLBUTTONUP: 
    ShowWindow(hwnd, SW_HIDE); 
    return 0;