我面临一个奇怪的问题,我需要你的帮助。我有一个 MFC MDI 应用程序,我正在尝试创建一个 WPF 窗口作为打开的 CView 的子级。
通过在我的 CView 中处理 OnCreate 消息并创建 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 调用,并且调整大小工作正常。我想知道在调整大小和父级是 CView 的 WPF 窗口时出了什么问题。
我上传了一个示例应用程序来说明问题: http ://cid-a059807de2e23c43.office.live.com/self.aspx/.Public/ResizeProblem.zip
请帮我。
谢谢你。