【发布时间】:2023-06-02 12:56:02
【问题描述】:
我正在为第三方 MFC 应用程序编写 Win32 插件 DLL。 DLL 需要显示一个模式对话框。当我使用DialogBox() 或其他普通的 Win32 API 执行此操作时(例如,我尝试编写自己的模态循环),主应用程序的窗口不会重绘所有元素:它重绘标准元素,但不是客户区。无模式对话框显示得很好。
我怀疑发生这种情况是因为 MFC 并没有真正意义上的 Win32 模式对话框。它只能有一个消息循环,DialogBox() 中的一个单独循环会破坏其微妙的机制。这是解释这一点的a CodeProject article。但是这篇 CodeProject 文章已有 9 年的历史,所以从那时起情况可能发生了变化。有人可以对此有所了解吗?该应用使用 MFC 8(即mfc80.dll)。
更新。这是original question的链接;它可能包含一些附加信息。
更新 2。感谢大家;我真的很感激所有的建议,它肯定有助于我了解事物如何组合在一起。我要探索的第一条路径是使用本机 MFC 的“模态”对话框。 (由于我使用 Python 完成所有这些操作,因此我将使用 Python 绑定 MFC,pywin32)。这需要一些时间;准备好后,我会用结果更新帖子。
【问题讨论】:
-
+1 好问题,我有兴趣看到答案!
-
另见*.com/questions/5058929,此问题是后续问题(或多或少)。
-
能否请您使用 Spy++(Visual Studio 自带)或其他类似的应用程序(我知道可以在 catch22.net/software/winspy 找到)来查看“控制台”窗口的客户区是否是不止一个子窗口?!
-
@STATUS 有几个子窗口:顶部是一个粗的 XTPTooBbar,下面是一个 Dialog (#32770)(带有 'Layout' 的那个),然后还有两个滚动条和一个自定义它们之间的“成长箱”(此处不可见)。他们都正确地重绘。没有其他子窗口。没有重绘的是“控制台”窗口的客户区。
标签: winapi mfc modal-dialog