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는이를 따르지 않습니다. 전체 애플리케이션이 닫히거나 최소화되는 경우에만 닫기/최소화됩니다.
필요한 경우 문제를 보여주는 샘플 응용 프로그램을 첨부 할 수 있습니다.
알려 주시기 바랍니다.
정말 고마워요.
CMyView의 닫기/최소화 이벤트를 추적하고 wpf 창에서 수동으로 복제해야 할 수도 있습니다. –