我正在调试第3方库的一个奇怪问题,该库显示格式化的消息框。该库使用基于CDialog的类,并使用DoModal()方法运行消息框对话框。有时会从一个公共子例程显示一条消息,该子例程将主窗口的句柄用作父窗口(类型1),而其他时候则是从另一个模式对话框(类型2)显示。
有时,类型1调用是由模式对话框中的一个动作触发的,当这种情况发生时,在关闭消息对话框后,原始对话框不再是模式对话框。如预期的那样,除了将带格式的消息框和系统默认消息框以及原始对话框保持不变之外,什么都不会更改。 进行Type 2调用时,原始对话框始终保持模式,因此我正在努力确保以这种方式调用库函数,但这看起来可能是CDialog本身的错误,因此我想问一下如果有人知道这一点。
我以前从未使用过这些类库(我是个中学C的家伙),但是看起来该库一直在使用EndDialog()来终止模式消息框,并且没有“花哨的,低级的我可以找到的Windows内容(消息格式除外)。很明显,我真的不知道我要问的是什么,因此,如果有更好的讨论这个问题的地方,请发给我。
另一方面,如果从CDialog和DoModal()派生的任何内容都这样做,则这似乎是类库中的错误,因为内置的模态对话框(如MessageBox)不会产生这种不良影响。我会共享库代码,但是我不是原始作者,也没有我的许可,但是只要您愿意对不熟悉C ++代码结构的人有耐心,我愿意寻找。 / p>
答案 0 :(得分:0)
我不知道我的回答是否会对您有所帮助。
但是有一个对话框的属性-“系统模态”,使它成为“系统模态对话框”。
如果将其设置为True,则对话框将变为系统模态对话框。