1.- こんにちは。今週ずっと多くのサイトやフォーラムを検索した後、私が抱えていた問題のポイントを見つけました。問題は、Visual C++ で新しい MFC プロジェクトを作成するときに、アプリケーションの種類を「ダイアログ ベース」に設定し、それぞれのダイアログ クラスを既定の CDialogEx から派生させると、変更せずにプログラムをすぐにコンパイルして実行するという問題が発生することです。コードのいずれか (あなたのマシンでこれを試すことができるかどうかはわかりません)。
2.-有線の動作は、ダイアログウィンドウがアクティブな状態で、タスクバーの空き領域をクリックすると(最大化されていない別のウィンドウでも)、ダイアログのウィンドウの境界線(タイトルバーを含む)ベースのアプリケーションは「フォーカスされた」(灰色ではない) ままで、タスク バーまたはアプリケーション ウィンドウを完全にカバーしていない別のウィンドウをクリックすると、アプリケーション ウィンドウはフォーカスを失うはずです。
3.-多くのコードの後でこれに気付きました.CFileDialogクラスを使用してこの動作を発見したためです.CFileDialogインスタンスを作成(DoModal)すると、ファイルダイアログが開いたときにアプリケーションウィンドウがフォーカスを失います(「灰色になる」ため) (そうあるべきです)しかし、ファイルダイアログが終了すると、ウィンドウの境界線は灰色のままになり(これは正しくありません)、ウィンドウを最小化して復元するか、別のウィンドウに切り替えてウィンドウに戻るまでそのままです.
4.- CDialogEx クラスからの継承に問題があることを発見しました。これは、(段落 1 で説明したように) 新しいプロジェクトを最初から作成したためであり、プログラムの動作を誤ったものを変更したのが私であるかどうかを確認するためでした。パラグラフ 2 で説明したように、新しいプロジェクトが動作することがわかりました。
5.-良いニュースは、新しいプロジェクトを作成しようとしたことですが、今回は CDialogEx ではなく CDialog から継承しています。そして驚いたことに、この新しいプログラムは正しく動作します。つまり、段落 2 で説明した有線の動作は、この新しいプロジェクトには存在しません。段落 3 で説明したように、別の問題はファイル ダイアログ (CFileDialog クラス) に関するものでした。幸いなことに、私のプロジェクトのコードを CDialogEx ではなく CDialog から継承するように変更することで、この問題も解決しました。つまり、問題は CDialogEx クラスでした。
6.-私はこの質問を書き、私が発見した情報を提供することにしました. フォーラムで提供されたすべてのアドバイスを試しましたが、何もうまくいきませんでした。
7.-私が言ったように、1 つの解決策は継承を CDialogEx から CDialog に変更することです。しかし、私の質問は、私のプログラムが CDialogEx クラスの下で正しく動作するようにするために何をすべきか知っているかどうかです。なぜなら、私は古いインターフェースではなく新しいインターフェースを使用することを好むからです。また、あなたのビジュアル スタジオで私と同じ問題を実験しているかどうかも知りたいです。
私の情報とあなたの回答が他の人に役立つことを願っています。回答ありがとうございます。