Немодальное дочернее окно WPF для собственного приложения MFC MDI - PullRequest
3 голосов
/ 31 августа 2011

У меня есть приложение MFC MDI, и я пытаюсь добавить в него новый диалог.Я хочу, чтобы этот диалог был в WPF (окно в основном, а не диалог).Это окно должно быть немодальным и дочерним по отношению к текущему представлению MDI.

Допустим, у меня есть CMyView в приложении MFC, и в его OnCreate я пытаюсь создать окно WPF.Для этого я создал класс-оболочку CMyWindowWrapper (который компилируется с / CLR)

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

  m_wrapper.Create(this);

  return 0;
}

В классе-оболочке окна есть функция Create, которая фактически создает окно WPF:

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

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

   m_myWindow = window;
}

MyWindow - это окно WPF, в которое я добавил функцию ShowModeless следующим образом:

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

        Show();
        ShowInTaskbar = false;
 }

Теперь приложение ведет себя следующим образом: всякий раз, когда создается CMyView, немодальное MyWindow создается успешно, и оно всегда отображается навершина CMyView, даже если основное внимание уделяется CMyView.Однако, когда CMyView закрыт или свернут, MyWindow не следует за ним.Оно закрывается / минимизируется только в том случае, если все приложение закрыто / свернуто.

Я могу прикрепить образец приложения, показывающий проблему, если это необходимо.

Пожалуйста, сообщите.

Спасиботак много.

1 Ответ

0 голосов
/ 01 февраля 2012

Альтернативным решением было бы сделать ваше окно WPF пользовательским элементом управления.Создайте немодальное диалоговое окно MFC и поместите пользовательский элемент управления WPF в немодальное диалоговое окно MFC.

...