У меня странная проблема, и мне нужна ваша помощь. У меня есть приложение MFC MDI, и я пытаюсь создать окно WPF как дочерний элемент открытого CView.
Мне удалось это сделать, обработав сообщение OnCreate в моем CView и создав окно WPF. Я также установил CView как родительский элемент окна WPF, чтобы он вел себя как его дочерний элемент.
Вот что я сделал:
int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
m_windowWrapper.Create(this->GetSafeHwnd());
return 0;
}
void CMyWindowWrapper::Create(HWND hParent)
{
m_myWindow = gcnew MyWindow();
m_myWindow->Show();
IntPtr^ hChildWnd = m_myWindow->GetHwnd();
::SetParent((HWND)hChildWnd->ToPointer(), hParent);
}
public partial class MyWindow : Window
{
public MyWindow()
{
InitializeComponent();
MouseLeftButtonDown += (o, e) => DragMove();
}
public IntPtr GetHwnd()
{
return (new System.Windows.Interop.WindowInteropHelper(this)).Handle;
}
}
Окно WPF появляется, как и ожидалось. Теперь проблема возникает, когда я пытаюсь изменить размер окна WPF. Внезапно элементы управления внутри окна растягиваются и перемещаются так, как если бы новый размер окна WPF соответствовал размеру родительского CView! Я попытался обработать событие SizeChanged и обнаружил, что NewSize был намного больше, чем размер окна WPF, и, скорее всего, был размером вмещающего CView.
Я попытался удалить вызов SetParent, и изменение размера сработало правильно. Интересно, что не так в изменении размера и окне WPF, чьим родителем является CView.
Я загрузил пример приложения, иллюстрирующего проблему:
http://cid -a059807de2e23c43.office.live.com / self.aspx / .Public / ResizeProblem.zip
Пожалуйста, помогите мне.
Спасибо.