如何一次创建、处理和删除多个窗口
How to create, handle and destory multiple windows at once?
我听说要在我的C++应用程序中创建多个窗口,我需要做的就是根据需要创建任意数量的HWND
,然后为每个窗口使用CreateWindowEx()
,以及适当的窗口类等。
我已经做到了,所以这不是问题。
现在,通常,我会为我的应用程序制作这种消息循环:
MSG msg;
while(1)
{
while(PeekMessage(&msg, hWnd, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
if(msg.message == WM_QUIT)
break;
}
(这应该是正确的,是吗?
但是现在我有 3 个窗口,我的消息循环如下所示:
MSG msg;
while(1)
{
while(PeekMessage(&msg, hWnd, 0, 0, PM_REMOVE) || PeekMessage(&msg, hConWnd, 0, 0, PM_REMOVE) || PeekMessage(&msg, hStatWnd, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
if(msg.message == WM_QUIT)
break;
}
所以它会检查所有窗口的消息,对吧?
现在我的问题是,这是获取多个窗口消息的正确方法吗?
另外,我听说对不同的窗口使用不同的WndProc
是不好的,这是真的吗,如果是这样,为什么?(如果我想每个窗口的行为略有不同,如何只使用一个?
最后,如何退出我的应用程序,以便在其中一个窗口关闭(任何窗口)时,所有窗口都将适当地关闭?
PeekMessage(&msg, NULL, ...
会做你需要的。 msg
将接收需要调度消息的窗口句柄,因此单个 API 调用适用于所有现有窗口。
hWnd [在,可选]
要检索其消息的窗口的句柄。该窗口必须属于当前线程。
如果 hWnd 为 NULL,则 PeekMessage 将检索属于当前线程的任何窗口的消息,以及当前线程上的任何消息 线程的消息队列,其 hwnd 值为 NULL(请参阅消息 结构)。因此,如果 hWnd 为 NULL,则窗口消息和线程 处理消息。
也就是说,您可以保留原始消息泵送循环,只是不要将其限制在特定窗口。
问:
消息现在我的问题是,这是获取多个窗口消息的正确方法吗?
循环,由您或某人发送消息。您可以在窗口的WndProc
上处理它们,而无需过多考虑究竟是谁传递消息并致电您的WndProc
。它同样适用于单个窗口和多个窗口。
另外,我听说对不同的窗口使用不同的 WndProcs 不好,这是真的吗,如果是这样,为什么?(如果我想每个窗口的行为略有不同,如何只使用一个?
假。
最后,如何退出我的应用程序,以便在其中一个窗口关闭(任何窗口)时,所有窗口都将适当地关闭?
在示例中发布WM_QUIT
时,消息循环会中断。然后你应该摧毁窗户并退出。
- 如何完全删除窗口的非工作区?
- 如何从 CLion 的运行窗口中删除程序项目路径
- 删除父/子窗口层次结构的最佳方法
- 如何从窗口中删除 TOPMOST 属性
- 替代QDockWidget的小部件,而没有删除以前的窗口
- 尝试使用窗口注册表中的路径和 DeleteFile() 方法删除.exe文件
- 先前在MFC中删除窗口
- QT调整窗口大小后,删除窗口后
- 事件在发布到Qt中的窗口时从队列中删除
- Qt 删除窗口小部件
- 如何枚举和删除窗口事件
- 如何永久删除主窗口标题栏
- 如何删除窗口
- 删除窗口中正在运行的文件
- ncurses:是否可以在不删除边框的情况下刷新窗口
- Qt QMainWindow中央窗口小部件删除
- 在QT关闭时从子窗口句柄中删除内存
- 如何删除Qt窗口的所有子窗口
- 从使用glfw创建的窗口中删除最大化按钮
- 应该重新绘制B样条曲线,而不删除窗口的所有其余部分