WTL モーダル ダイアログを表示する Edit() メソッドを実装する COM コンポーネント (dll) を開発しました。
この COM コンポーネントへの完全なインターフェイスは、化学プロセス業界で使用されているソフトウェア標準 (CAPE-OPEN) に対応しており、その結果、この COM コンポーネントは、私が制御できないさまざまなサードパーティの実行可能ファイルで使用できるようになっています。
私のコンポーネントは、これらの EXE の多くで期待どおりに動作しますが、特に 1 つの場合、ダイアログが表示されずに Edit() メソッドがハングします。
::MessageBox()
ただし、ダイアログが表示される直前に呼び出しを行うと、DoModal()
最初に MessageBox を表示した後に正しく動作します。
この問題は、この特定の EXE が「隠しウィンドウ アプリケーション」として実行されていることに関係している可能性があるのではないかと疑っています。
::GetConsoleWindow()
ダイアログの親としてNULL と戻り値の両方を使用しようとしましたが、どちらも機能しませんでした。
ダイアログ自体は ATL/WTL CPropertySheetImpl です。
問題の親アプリケーション (EXE) は、(やや敵対的な) サード パーティによって開発されているため、私の手に負えません。
::MessageBox()
COM コンポーネントから標準の Windows ファイル ダイアログを正常に呼び出したり、表示したりできることはわかっています。実行後、カスタム ダイアログを表示できるようになります。最初に「標準」ダイアログを表示しないと、カスタム ダイアログを表示できません。
不要な MessageBox を最初に表示せずにダイアログを表示する方法を誰かが提案できますか? この EXE が同じインターフェイスに対応する他の COM コンポーネントからのダイアログを表示するのを見たので、それが可能であることはわかっています。