c++ - 如何使用 WM_CLOSE 关闭子窗口?

标签 c++ c winapi hwnd

我将子 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/

相关文章:

c++ - 缩小 QGraphicsView 会崩溃

c++ - 如何解决对自己类的构造函数和析构函数的 undefined reference 的问题?

c++ - 如何使用 Visual Studio 2012 和英特尔编译器 XE 2013 构建可在 Windows XP 中运行的可执行文件?

c++ - 允许 IFileOpenDialog 选择一个尚未创建的文件

c++ - 从 C++ 缓冲区到 python::boost::list

C 将字符复制到结构

c - phong 着色中的灯光位置坐标

C - 控制到达非 void 函数的末尾 [-Wreturn-type]

c++ - GetImmersiveColorTypeFromName 总是返回 -1

windows - 如何停止在任务栏上显示我的应用程序?