【发布时间】:2015-06-20 19:48:39
【问题描述】:
我正在尝试调用 CFileDialog 以允许用户选择文件。
我的程序是一个 MFC 应用程序,我使用的是 VS2005。
这是我的问题:
我有创建无模式对话框的主视图。在这个对话框中,我有一个菜单项,可以进行简单的 CFileDialog 调用:
CFileDialog dlgFile(true);
dlgFile.DoModal();
但程序总是挂在 DoModal 上。程序不响应命令,任务管理器说它已停止响应。
其他有趣的信息:
- 这仅在 Windows 8 上观察到,Windows 7 机器似乎不受影响。
- 我使用相同的基本视图->无模式对话框->CFileDialog 方案创建了一个新项目,它工作得很好。
- 当我调用 MessageBox 时,它出现在对话框的后面(我必须按 alt 才能将它放在前面),但程序仍然响应。
- 如果我在主视图中进行相同的 CFileDialog 调用,它会毫无问题地弹出。
- 另一个可能与此相关或无关的烦人问题:当 CFileDialog 调用工作时(在 Win 7 上),在浏览窗口中选择“计算机”会显示一个空白屏幕(其他一切正常)。李>
我能找到的最接近的问题是:Why does CFileDialog::DoModal() Hang? 但是,我不使用线程(至少我 95% 确定我不使用,这不仅仅是我的项目)。我的项目会自动线程化吗?如果是这样,我如何确保这不会给我带来问题?
【问题讨论】:
-
我在 Windows 8 中尝试过,但没有发现问题。您必须显示更多代码才能重现该问题。
dlgFile必须有更多参数等。 -
@BarmakShemirani 是的,我希望我可以,但仅此而已,没有更多代码。我真的有一个函数,里面只有这两行代码。我似乎也无法复制它。就像我提到的那样,我在 Windows 8 上使用相同的基本设置创建了一个新项目,并且运行良好。它似乎只发生在这个项目中。
-
创建你的 CFileDialog 传递你的无模式窗口的父窗口。看看constructor有一个
CWnd* pParentWnd = NULL参数可以设置 -
@cha 我试过了,我已经将父级设置为桌面、对话框和主视图,仍然冻结。
标签: c++ mfc visual-studio-2005 cfiledialog