主程序AppA调用一个dll(dllA),dllA用DoModal()显示一个参数选择对话框DialogA,在DialoaA中有一个按钮BtnA,点击BtnA调用另一个dll(dllB),dllB也是用DoModal()显示一个对话框DialogB,在DialoaB中有一个按钮BtnB,点击BtnB显示文件选择对话框FileDlg,但是FileDlg不显示,按Alt键可以正常显示,这是为何?如果AppA分开调用dllA和dllB,则能正常显示FileDlg。
可能是因为对话框模态对话框(DoModal)导致了消息循环阻塞,从而影响了文件选择对话框的正常显示。
当调用DoModal显示对话框时,当前线程的消息循环将被阻塞,直到对话框关闭。如果AppA在等待第一个对话框(DialogA)关闭,但又在等待第二个对话框(DialogB)关闭,则消息循环被双重阻塞,并可能影响到文件选择对话框的显示。
因此,建议您更改代码,使用非模态对话框或在独立的线程中显示对话框,以避免这种情况。
不知道你这个问题是否已经解决, 如果还没有解决的话: