C++/(MFC dummy) 和纯 Win MessageBox() - 如何删除消息队列或以其他方式删除现有的鼠标点击/按键缓冲区

标签 c++ windows mfc

(对于有 Windows 消息队列处理和对话框经验的人来说,这可能是一个初学者问题。不幸的是,这不是的专业领域,所以请多多包涵。)

就用户界面而言,我有一个非常简单的 C++ 程序。 由于多种原因,它不应该是一个真正的控制台程序,但它在无人值守的情况下运行。 它基本上是一个 MFC stub ,根本不显示窗口。但有时它会显示如下消息框:

MessageBox("Question,"XX",MB_YESNO) 左右。

问题是,当两个问题依次提出时,有时 Windows 似乎保存了鼠标点击或键盘点击,或者用户只想点击一次,但硬件发送了两次点击。所以用户没有真正可能回答第二个问题,但是从之前的“幽灵”点击中回答是或否。 (有一个词,但我不知道它的英文。我希望你明白我的意思。)

在命令行中有一个 fflush() 用于此类操作。这里怎么处理?

如果我在某处找到现成的代码,我什至会使用定制的 Messagebox (我不必写它:-)

但我想,可能有一个易于使用的代码片段可以在显示下一个消息框之前删除应用程序的消息队列。但我所知道的关于 Windows 消息的是它们存在 ;-( 谁能帮帮我?

最佳答案

菲尔姆,

消息框是一个模态窗口,因此它有自己的消息循环。当消息框被关闭时,它的消息不存在,没有鼠标消息。

除非调用 GetCapture,否则鼠标单击消息总是发布到光标下的窗口。 根据您的说法,您没有显示任何窗口,因此队列中没有发布鼠标消息?

解决您的问题的唯一方法是调试您的应用程序或您为重现此问题而编写的测试项目。你能把它写下来并张贴到某个地方供下载吗?

关于C++/(MFC dummy) 和纯 Win MessageBox() - 如何删除消息队列或以其他方式删除现有的鼠标点击/按键缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22307461/

相关文章:

windows - 用本地配置文件替换 Microsoft.VC90.CRT WinSxS 策略文件

c# - 确定网络驱动器的协议(protocol)

c++ - 从 MFC 调用 ATL COM dll

c++ - MFC 应用程序中的辅助窗口

c++ - 使用 std::initializer_list 构造函数而不产生歧义?

c# - 为什么我的 C++ 代码看不到这个 C# 类成员?

c++ - 使用使用 std::async 创建的线程发送 MPI 的线程安全

java - 从 Java 转移到 C++

windows - 批处理文件创建另一个文件,没有 "push"ren 到另一个文件

c++ - 在 MFC 功能区栏中删除以编程方式添加的面板分隔符