2011-10-06 83 views
2

我正面臨一個奇怪的問題,我需要你的幫助。我有一個MFC MDI應用程序,並且我試圖創建一個WPF窗口作爲打開的CView的子項。將一個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調用,並調整大小工作正常。我不知道在調整大小和WPF窗口的父級是CView時會出現什麼問題。

我上傳說明問題的一個示例應用程序: http://cid-a059807de2e23c43.office.live.com/self.aspx/.Public/ResizeProblem.zip

請幫助我。

謝謝。

+0

我有這個問題兩個。我甚至迷上了':: OnSize',它沒有正確調整大小。它看起來很糟糕。 – Jordan

回答

-1

我有同樣的問題,在使用SetParent後,我的子窗口上的任何Resize或DragMove都會導致NewSize變得很大。我的區別是,我的主要應用程序是WPF,我創建了&在單獨的線程上運行一個WPF子窗口。

我的老闆發現這個鏈接1如果有人談到如何使用反射孩子的所有者設置爲其父:

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窗口運行在一個單獨的線程。