首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调整作为CView子级的WPF窗口的大小

调整作为CView子级的WPF窗口的大小
EN

Stack Overflow用户
提问于 2011-10-06 21:58:38
回答 1查看 668关注 0票数 2

我正面临一个奇怪的问题,我需要你的帮助。我有一个MFC MDI应用程序,并且我正在尝试创建一个WPF窗口作为打开的CView的子级。

通过在我的CView中处理OnCreate消息并创建WPF窗口,我能够成功地做到这一点。我还将CView设置为WPF窗口的父级,以便它的行为类似于它的子级。

下面是我所做的:

代码语言:javascript
复制
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

请帮帮我。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2012-01-27 04:13:38

我也遇到过同样的问题,在使用SetParent之后,我的子窗口中的任何Resize或DragMove都会导致NewSize变得非常庞大。我的不同之处在于,我的主要应用程序是WPF,我在单独的线程上创建和运行子WPF窗口。

我的老板发现了这个链接1,其中有人评论了如何使用反射将孩子的所有者设置为其父:

代码语言:javascript
复制
typeof(System.Windows.Window).InvokeMember(“_ownerHandle”, BindingFlags.Public |      BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetField, null, YOUR_CHILD_WINDOW, new object[] { YOUR_PARENT_HANDLE });

在使用这段代码并删除我的SetParent之后,我的问题就消失了,并且能够将我的子窗口的所有者设置为在单独线程上运行的主WPF窗口。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7675360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档