我将子 hwnd
创建为带有关闭按钮的弹出窗口,并使用 WndchildProc
来处理来自子窗口的消息
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
。
但是当按下子hwnd
的关闭按钮时,没有任何反应。如果按下 parent-hwnd
的关闭按钮,则触发 WM_DESTROY
消息。
因此,我无法(仅)使用关闭按钮关闭子窗口。
如何使用关闭按钮关闭子窗口?
更新:复制时缺少文本,添加:默认情况下的 CallWindowProc。
最佳答案
我找到了单击关闭按钮时触发事件 WM_NCLBUTTONUP 的解决方案。
case WM_NCLBUTTONUP:
ShowWindow(hwnd, SW_HIDE);
return 0;
关于c++ - 如何使用 WM_CLOSE 关闭子窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45341529/