一段时间以来,我一直在尝试在我的 C++ 应用程序中实现文件对话框,并且我使用本文中描述的代码取得了很好的成功(它是德语,但代码应该可以理解):
https://msdn.microsoft.com/de-de/library/windows/desktop/ff485843(v=vs.85).aspx
但是,在我的窗口类中使用此代码,它是一个 CDialogImpl,我就是不知道如何使这个文件选择器模式化。如果我使用此代码,我可以生成多个文件选择器。
当然,我可以通过添加一个表示状态的成员变量来跟踪状态,但它仍然无法解决在打开对话框时能够在主窗口中单击的问题。
有什么方法可以让我将此窗口设为模态?我一直在尝试扫描所有可用的方法,但找不到任何东西。我没有找到任何可以在创建中传递的标志,也没有找到我可以在创建后设置的任何选项。
任何帮助表示赞赏!
您链接到的示例非常简单,除了文件对话框之外没有其他 UI。您的程序更复杂,有一个窗口,从中可以调用文件对话框。
您需要为文件对话框提供所有者。当你这样做时,所有者被禁用,这是使对话框模式化的部分原因。未能通过所有者意味着其他窗口没有被禁用,因此仍然响应用户输入。
示例代码没有提供所有者,但由于该程序中没有其他窗口,这是良性的。模态只有在有多个窗口时才有意义。
因此,要解决此问题,请将窗口的所有者(窗口句柄)传递给Show
文件对话框的方法。
禁用所有者窗口是模态对话框的关键部分之一。您会发现任何用于模式对话框的API都希望您指定所有者。养成期望提供自己的窗口的习惯,并寻找这样做的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句