- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我将这段代码用于主循环(我的函数):
while (running)
{
if(is_close)
{
Log().push_log("close", "message close!", logInfo);
running = active = false;
break;
}
while (PeekMessage(&msg, g_hWnd, 0, 0, PM_REMOVE))
{
std::cout << "Wnd: " << msg.message << std::endl;
if (msg.message == WM_QUIT || msg.message == WM_DESTROY || msg.message == WM_CLOSE)
{
MessageBox(0, "Hello, World", "Hello", MB_OK);
running = false;
}
// TranslateMessage(&msg);
DispatchMessage(&msg);
}
if (running && active)
render.DrawObject(g_hDC);
}
嗯,那我用WndProc:
LRESULT CALLBACK GLWindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
std::cout << "Wnd Proc: " << msg << std::endl;
return DefWindowProc(hWnd, msg, wParam, lParam);
}
当我试图在我的函数中获取消息 WM_QUIT
、WM_DESTROY
或 WM_CLOSE
时,它不起作用。我的函数看不到消息。
我怎样才能收到这条消息?
最佳答案
PeekMessage 或 GetMessage 将只返回使用 PostMessage() 发布到消息队列的消息。那永远不会是 WM_CLOSE 或 WM_DESTROY,这些消息是用 SendMessage() 发送的,直接传递给窗口过程,不进入消息队列。除非您的代码中有 PostQuitMessage() 调用,否则您不会收到 WM_QUIT,而您没有。
您确实必须为主窗口编写一个窗口过程。只需处理 WM_DESTROY 并调用 PostQuitMessage(0) 就足够了。
LRESULT CALLBACK GLWindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
if (msg == WM_DESTROY) PostQuitMessage(0);
return DefWindowProc(hWnd, msg, wParam, lParam);
}
您现在将在游戏循环中获得 WM_QUIT。
关于c++ - 如何拦截消息: "WM_QUIT || WM_DESTROY || WM_CLOSE" WinAPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18827617/
下面是我的消息过滤器: bool MyFilter::PreFilterMessage(Message %m){ switch(m.Msg){ case WM_CLOSE: c
我把winapi CreateWindowEx打包成一个简单的类。由于每个窗口共享相同的 wndProc(hwnd,msg,wparam,lparam),我将 CreateWindowEx 创建的每个
本文对WM_CLOSE、WM_DESTROY、WM_QUIT及各种消息投递函数的功能及区别做出了分析比对,有助于读者更好的对消息投递函数加以理解。详情如下: 1、WM_CLOSE、WM_DEST
对于子窗口,父窗口首先接收WM_DESTROY,然后是子窗口。对于自有 window ,情况恰恰相反。拥有的窗口首先接收WM_DESTROY,然后是所有者。如果我想修改一些会影响子窗口的内容,我可以在
我有一个用于 Windows Mobile 5 的 WTL 8.0 SDI 应用程序。在下面这个人为设计的示例中,我创建了一个 View ,销毁它,然后重新创建它。但是,当它重新创建时,WM_INIT
为了将 WNDPROC 用作对象方法,我采用了您在那里找到的典型解决方案,但看起来 WM_DESTROY 消息并未发送到对象窗口自身的WNDPROC,关闭窗口后程序不退出。 我的窗口类如下所示(删除了
下面的程序创建一个带有公共(public)控件工具提示的窗口,该工具提示对该窗口进行了子类化。当我收到 WM_DESTROY 时,我本能地决定销毁工具提示,因为 WM_DESTROY comes be
我正在尝试使用 Win32 API 创建一个非常基本的窗口,我已经很久没有这样做了。 我认为我的消息循环没问题,但是当我关闭打开的窗口时,应用程序仍在运行。看起来消息循环永远不会收到 WM_QUIT
我将这段代码用于主循环(我的函数): while (running) { if(is_close) { Log().push_log("close", "mes
在详细说明 another question 的答案时(我自己),我想到了使用 MessageBox 来报告对话框结果的想法。它是一个使用 DialogBox() 函数创建的 WinAPI 模式对话框
在 Windows 中处理窗口生命周期的默认方式是监听 WM_CLOSE 消息,然后决定是否关闭窗口,然后可选地处理 WM_DESTROY 消息(用于清理等)。 是否存在 WM_DESTROY 可以在
我想知道 Windows 程序中的 WM_QUIT、WM_CLOSE 和 WM_DESTROY 消息之间有什么区别,本质上是:它们是什么时候发送的,除了程序定义的之外,它们是否有任何自动效果? 最佳答
我正在使用 win32 API 在 Windows 7 64 位操作系统上进行试验。当我在 Debug模式下运行我的程序时,我的窗口出现了,但我有 2 个错误。首先是我从 Charles Petzol
我是一名优秀的程序员,十分优秀!