2011-08-31 5 views
3

MFC MDI 응용 프로그램이 있는데이 대화 상자에 새 대화 상자를 추가하려고합니다. 이 대화 상자가 WPF (기본적으로 대화 상자가 아닌 창)에 있어야합니다. 이 창은 모덜리스이어야하며 현재 MDI 뷰의 하위 창이어야합니다.모덜리스 자식 WPF 네이티브 MFC MDI 응용 프로그램에 대한 창

MFC 응용 프로그램에서 CMyView가 있고 OnCreate에서 WPF 창을 만들려고합니다.

void CMyWindowWrapper::Create(CWnd* pParent) 
{ 
    MyWindow^ window = gcnew MyWindow(); 

    window->ShowModeless((IntPtr)pParent->GetSafeHwnd()); 

    m_myWindow = window; 
} 

MyWindow가있다 이렇게하려면, 나는 CMyWindowWrapper라는 래퍼 클래스

int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
    if (CView::OnCreate(lpCreateStruct) == -1) 
    return -1; 

    m_wrapper.Create(this); 

    return 0; 
} 

이 창 래퍼 클래스가 실제로 WPF 윈도우를 생성하는 생성 기능을하고있다 (즉, /의 CLR로 컴파일)을 만들어 I 같이 ShowModeless라는 함수를 추가 WPF 창 다음하십시오 CMyView가 생성 될 때마다, 비모 MyWindow는 successf을 만든 다음과 같이

public void ShowModeless(IntPtr parent) 
{ 
     WindowInteropHelper helper = new WindowInteropHelper(this); 
     helper.Owner = parent; 

     Show(); 
     ShowInTaskbar = false; 
} 

이제 애플리케이션이 거동 ully이고 포커스가 CMyView에 있더라도 CMyView 맨 위에 항상 나타납니다. 그러나 CMyView가 닫히거나 최소화되면 MyWindow는이를 따르지 않습니다. 전체 애플리케이션이 닫히거나 최소화되는 경우에만 닫기/최소화됩니다.

필요한 경우 문제를 보여주는 샘플 응용 프로그램을 첨부 할 수 있습니다.

알려 주시기 바랍니다.

정말 고마워요.

+0

CMyView의 닫기/최소화 이벤트를 추적하고 wpf 창에서 수동으로 복제해야 할 수도 있습니다. –

답변

0

다른 해결책은 WPF 윈도우를 사용자 정의 컨트롤로 만드는 것입니다. MFC 모덜리스 대화 상자를 만들고 WPF 사용자 정의 컨트롤을 MFC 모덜리스 대화 상자에 넣습니다.

관련 문제