Mik*_*hin 7 winapi mfc modal-dialog
我正在为第三方MFC应用程序编写Win32插件DLL.DLL需要显示模式对话框.当我使用DialogBox()或其他普通的Win32 API(例如我试图编写自己的模态循环)时,主应用程序的窗口不会重绘所有元素:它重绘标准元素,但不重绘客户区.无模式对话框显示得很好.

我怀疑这是因为MFC在Win32意义上没有真正的模态对话框.它只能有一个消息循环和一个单独的循环来DialogBox()破坏其精密的机械.这是一篇CodeProject文章,解释了这一点.但是CodeProject的这篇文章已经有9年了,所以也许从那时起事情发生了变化.有人可以对此有所了解吗?该应用程序使用MFC 8(即mfc80.dll).
更新.这是原始问题的链接; 它可能包含一些额外的信息.
更新2.感谢大家; 我非常感谢所有的建议,它肯定有助于我全面了解事物如何融合在一起.我要探索的第一条路径是使用原生MFC"模态"对话框.(因为我用Python做了所有这些,我将使用Python绑定用于MFC pywin32).这需要一些时间; 当它准备好了,我会用结果更新帖子.
每个线程都可以有一个消息循环。将模式对话框放入单独的线程中,并通过禁用父窗口来模拟 Windows 的标准行为。
编辑:经过一些讨论(见下文),父代码的行为似乎不正确。
尽管如此,我认为还是有可能的解决方法。其中一个可能是父窗口(对于模式对话框,但对于当前行为不正确的窗口来说是子窗口),它覆盖了错误的窗口内容,但从内存中的 DC 重新绘制它以模仿正确的行为。当然,父窗口仍然必须被禁用。另一种解决方案可能是对父窗口进行子类化,以纠正行为。由于插件将在同一进程中运行,因此实现应该很简单。
| 归档时间: |
|
| 查看次数: |
1295 次 |
| 最近记录: |