MFCDLLを介して拡張機能を提供したVB6アプリケーションがあります。ただし、DLLのCDialogベースのクラスには特定の問題があります。Me.hWnd
VB6アプリのメインフォームから渡して、CDialogコンストラクターに渡し、そのDoModal()
親が何であるかを認識します。CDialogベースのクラスは上のVB6アプリの上にとどまりますが、モーダルダイアログで期待される方法でVB6アプリをブロックDoModal()
しません。つまり、DLLダイアログがEXEのウィンドウの前に残っている間も、DLLを呼び出したボタンをクリックして、ダイアログをもう一度(そして何度も)表示することができます。
VB6コードから示すことはあまりありません。私が言ったように、それはただ通過しMe.hWnd
ます。MFCコードは非常に単純です。
HWND exeHwnd = pSessionContext->GetHWnd(); // our state container for the DLL
CWnd* exeWnd = CWnd::FromHandle(exeHwnd);
MyCDialog dlg(exeWnd);
INT_PTR result = dlg.DoModal();
// waits, stays in front, but does not "block" the window
switch (result) // ...
途中で値をトレースし、Spy++でウィンドウハンドルを確認しました。すべてが順調のようです。私が見逃している、または間違っているアイデアはありますか?
追加情報
そのhwnd値は、MessageBoxの他の場所で使用され、期待どおりに機能します。