2011-07-28 8 views
0

他の人が見たことがあるかどうかを確認したいという非常に奇妙な問題が発生しています。私はWPFユーザーコントロールをホストするMFCダイアログを持つC++アプリケーション(CLRサポートでコンパイル)を持っています。ダイアログボックスが開くたびに、WPFユーザーコントロールは表示されません。そのコントロールは、そのユーザーコントロールのボタンを押すことができます。明らかに、私はそれを見ることはできませんが、私は、ボタンがあるはずの領域をクリックすると、クリックイベントに応答します。WPF User Control on MFCダイアログで、毎度何度も非表示を表示しています

この中で奇妙な部分は散発的です。ユーザーがアプリケーションを起動した後に初めてダイアログに入るときがあります。それ以外の場合は、ダイアログに数回成功すると発生します。私たちは、それがいつ起こるかについては全く知らなかった。それはたった今起こる。また、XP、Vista、Win7のすべての異なるオペレーティングシステムでこのことを確認しました。

問題を解決するには、単にアプリケーションを終了し、アプリケーションを再起動するだけで正常に修復されます。コードの点で

、MFCダイアログ上のWPFユーザーコントロールのための標準的なアプローチが使用されている:

// Create the initial object 
    System::Windows::Interop::HwndSourceParameters^ sourceParams = gcnew System::Windows::Interop::HwndSourceParameters ("BatchSelectionContainer"); 
    sourceParams->PositionX = x; 
    sourceParams->PositionY = y; 
    sourceParams->Height = height; 
    sourceParams->Width = width; 
    sourceParams->ParentWindow = System::IntPtr(parent); 
    sourceParams->WindowStyle = WS_VISIBLE | WS_CHILD; 
    BatchSelectionDialogGlobals::gHwndSource = gcnew System::Windows::Interop::HwndSource(*sourceParams); 
    BatchSelectionDialogGlobals::gHwndSource->AddHook(gcnew HwndSourceHook(ChildHwndSourceHook)); 

    // Save a reference to the new frame 
    BatchSelectionDialogGlobals::BatchSelectionFrame = gcnew ProteinSimple::ParticleDetection::Console::BatchSelection(); 

    // Establish an event handler for the buttons 
    BatchSelectionDialogGlobals::BatchSelectionFrame->EnableExecuteButton += gcnew ProteinSimple::ParticleDetection::Console::BatchSelection::GeneralHandler(&BatchSelectionDialog::EnableExecuteButton); 
    BatchSelectionDialogGlobals::BatchSelectionFrame->DisableExecuteButton += gcnew ProteinSimple::ParticleDetection::Console::BatchSelection::GeneralHandler(&BatchSelectionDialog::DisableExecuteButton); 

    // Finalize the visual parts and return the handle 
    BatchSelectionDialogGlobals::gHwndSource->RootVisual = BatchSelectionDialogGlobals::BatchSelectionFrame; 
    return (HWND) BatchSelectionDialogGlobals::gHwndSource->Handle.ToPointer(); 

これは確かに奇妙なものです。私は一度も見たことのないユーザーがいますが、他のユーザーは何度も何度も起こります。

MFCのバグのように感じ、WPFコントロールの表示方法がわかります。しかし、私はオンラインで検索したことがあり、誰もこの問題の説明を聞いたことはありません。コードは例外を投げているわけではないので、私はその問題が何であるかはわかりません。

私は困惑しており、問題についての洞察を深めることができます。

答えて

0

WPFはMFCやWinFormsが描画するようにwindows-controlsとして描画しません.Spy ++を使用して確認できます。そのため、WPFとMFCを混在させることは不可能/簡単です。

関連する問題