Win32:是啥让我的消息循环在该示例中无法正常工作?

Posted

技术标签:

【中文标题】Win32:是啥让我的消息循环在该示例中无法正常工作?【英文标题】:Win32: What is making my message loop work incorrectly in that example?Win32:是什么让我的消息循环在该示例中无法正常工作? 【发布时间】:2010-12-16 20:57:23 【问题描述】:

我最近遇到了一种情况,我想在 Win32 中使用无模式对话框。

Win32: Toolbar dialog seems to never get focus and causes the main window to process slow!?

我发现这是我的消息循环:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) 
    // Doing required stuff here...

    while (GetMessage(&Msg, hWnd, 0, 0) > 0) 
        // Processing messages here...
    

事实上,只要我没有任何无模式对话框,这个消息循环就可以正常工作,因为它与模式对话框完美配合,因为它们处理自己的消息循环。当我将hWnd 实例替换为NULL 时,我的无模式对话框完美运行。我只是不明白其中的区别,只是我收到的消息似乎不是针对某个特定窗口的。

有人能解释一下是什么让这个消息循环工作不正确吗?

作为这个:

while (GetMessage(&Msg, NULL, 0, 0) > 0) 
    // Processing messages here...

完美运行!

【问题讨论】:

是的,有点太明显了。无模式对话框还需要在消息循环中使用 IsDialogMessage()。 @Hans:是的,确实如此。我应该已经在这些示例中编写了它,我确实将它包含在链接中的问题中,尽管我没有在这里说明它。我的错。 【参考方案1】:

区别非常明显:您在GetMessage 中指定了HWND。因此,您没有处理任何其他窗口的任何消息,包括您的工具栏。请参阅GetMessage 的文档

【讨论】:

谢谢!我想确保我正确理解了我的错误,并且您的回答反映了我的想法,尽管我不确定。 =)

以上是关于Win32:是啥让我的消息循环在该示例中无法正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

是啥让我的模型在笔记本电脑和 colab 上运行时预测错误值?

找出是啥让我在 torch7 中记忆犹新

c # 初学者 win32 API转型者,c# 的winform的消息机制是啥?以及它的主线,为啥没有消息循环??

是啥让 Qt 小部件及其布局正常运行(就其大小而言)?

是啥让某些蓝牙设备在 iOS“我的设备”中列出?

发生了啥让我的键盘只是一个酒吧[重复]