MFC アプリケーションで WPF ウィンドウをホストしようとしています。WPF ウィンドウをラップする CCustomEditor クラスを作成しました。次の create メソッドがあります。
BOOL CCustomEditor::Create(LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd)
{
if (objInterop == NULL)
{
DialogWindow ^myWindow = gcnew DialogWindow(pParentWnd);
CUnmanagedCustomEditor *objProxy = new CUnmanagedCustomEditor();
objInterop = objProxy;
System::String ^strClassName = msclr::interop::marshal_as<System::String ^>(lpszWindowName);
HwndSourceParameters^ sourceParams = gcnew HwndSourceParameters(strClassName);
sourceParams->PositionX = rect.left;
sourceParams->PositionY = rect.top;
sourceParams->ParentWindow = System::IntPtr(pParentWnd->GetSafeHwnd());
sourceParams->WindowStyle = dwStyle;
objProxy->m_hwndSource= gcnew HwndSource(*sourceParams);
objProxy->m_wpfUC = myWindow;
objProxy->m_hwndSource->RootVisual = objProxy->m_wpfUC;
// we need to attach a handle since it is a window control
Attach((HWND) objProxy->m_hwndSource->Handle.ToPointer());
}
return TRUE;
}
私が遭遇している問題はこれにあります:
DialogWindow ^myWindow = gcnew DialogWindow(pParentWnd);
CWnd を直接 System.Windows.Window として扱うことはできないことはわかっていますが、どのような変換が必要かはわかりません。