为什么不会显示一个消息框
Why would a message box be not displaying?
我在一个具有非常奇怪的窗口模式设置的MFC项目上。我认为此设置正在搞砸如何显示自有的消息框。
发生的事情是,在按下alt键之前,不会看到消息框。
我仍在尝试将我的头缠在他们正在使用的窗户设置上,但是也许有人可以给我一个有关寻找什么的线索?
我写了一个解决方法,在其中我将所有者窗口和消息框的标题传递到一个类,该类催生了一个遍布所有窗口的线程,并找到了一个消息框对话,该对话由指定的所有者拥有,标题为标题。但是,我将不得不进行搜索和替换1000多个实例,以使其成为范围的工作系统。
更好的选择是找到根本原因。但是,这种复杂性非常艰巨。我应该寻找的任何线索可能会引起这种行为。
这是由MFC cdialog domodal引起的系统消息框。(请对该错误进行投票或评论。行为非常出乎意料。)
我通过尝试使用以下方式试图填充队列中的所有消息来追踪这一点:
MSG msg = { 0 };
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TRACE(_T(R"--(,"% *.*s",PEEK,0x%08x,"%s",0x%08x,0x%08x,0x%08x)--" "n"),
0, 0, _T(""), msg.hwnd, "Window HAS msg",
msg.message, msg.wParam, msg.lParam);
TranslateMessage(&msg);
DispatchMessage(&msg);
}
这将输出队列中的所有消息,并向我展示什么窗口和什么消息(在这种情况下,WM_PAINT
)是罪犯。
然后,我追踪了附加到的窗口的哪个类对象,并查看了其OnPaint()
处理程序。
事实证明,先前的程序员在构造CPaintDC
对象之前先放置一个if
X,然后将return
条件放置。它的构造函数调用BeginPaint()
,进而验证了无效的区域。在没有验证无效区域的情况下,系统将继续生成WM_PAINT
消息,直到无效的区域为空。这将导致消息队列永不空。
不确定这是否重要,但是有问题的窗口和对话框之间的关系是它们位于同一线程中,与根应用程序窗口相同。有两个显示模式,具有以下设置:
-ROOT -ROOT
+-CHILD +-MESSAGE BOX
+-MESSAGE BOX +-CHILD
+-CHILD +-CHILD
+-CHILD +-CHILD < Offender
+-CHILD < Offender +-CHILD
+-CHILD
相关文章:
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 将类成员函数作为线程调用到另一个类成员函数时发出警告消息
- 为什么 zmq 将多条消息打包到一个 TCP 帧中?
- 如何制作一个程序,它使用特定单词加密和解密消息?
- 如何编写一个接受如下断言消息的自定义断言函数:assert(false) << "assertio
- QTcpSocket:消息不是从另一个线程发送的
- 如何制作一个带有框的消息框,以便在 Eclipse C++ 中键入文本?
- 发送到另一个窗口的鼠标移动消息不执行任何操作
- 尝试获取用户输入和cout消息期望,当我输入一个有效名称时,它将所有这些命名
- 当我使用套接字代码发送第二条消息时,我有一个"sendto() Invalid argument"
- 如何在OMNET++中收到来自前一个模块的所有消息后将一条消息发送到下一个模块
- 发送消息WM_SETTEXT不适用于 MFC 应用程序的另一个应用程序
- 为什么不会显示一个消息框
- 在消息框中有一个Combobox
- C++:试图挂接一个消息框并更改其位置
- SIEM通过TCP流式传输,将多条消息输入一个事件中
- 发送和将消息从一个类发送到另一堂课的问题.MFC程序
- 将 WndProc 替换为另一个函数来处理消息
- dllimport将一个c++方法移植到c#.当从C#调用时,程序关闭,没有任何错误消息
- Qt:在ubuntu中使用crontab定期启动一个消息框