CFileDialog を呼び出して、ユーザーがファイルを選択できるようにしようとしています。
私のプログラムは MFC アプリケーションで、VS2005 を使用しています。
これが私の問題です:
モードレス ダイアログ ボックスを作成するメイン ビューがあります。このダイアログ ボックスには、単純な CFileDialog 呼び出しを行うメニュー項目があります。
CFileDialog dlgFile(true);
dlgFile.DoModal();
しかし、プログラムは常に DoModal でハングアップします。プログラムはコマンドに応答せず、タスク マネージャーは応答を停止したと表示します。
その他の興味深い情報:
- これは Windows 8 でのみ確認されており、Windows 7 マシンは影響を受けないようです。
- 同じ基本的な View->modeless dialog->CFileDialog スキームで新しいプロジェクトを作成しましたが、うまくいきました。
- MessageBox を呼び出すと、ダイアログ ボックスの後ろに表示されます (前面に表示するには Alt キーを押す必要があります) が、プログラムは応答します。
- メイン ビューで同じ CFileDialog 呼び出しを行うと、問題なくポップアップします。
- これに関連する、または関連しない別の厄介な問題: CFileDialog 呼び出しが機能している場合 (Win 7)、参照ウィンドウで「コンピューター」を選択すると空白の画面が表示されます (他のすべては正常に機能します)。
私が見つけることができる最も近い質問はこれです: CFileDialog::DoModal() がハングするのはなぜですか? ただし、私はスレッドを使用しません (少なくとも 95% は使用しないと確信しています。これは私のプロジェクトだけではありません)。プロジェクトは自動的にスレッド化されますか? もしそうなら、それが私に問題を引き起こしていないことをどのように確認できますか?