2011-10-06 10 views
2

이상한 문제가 발생하여 도움이 필요합니다. MFC MDI 응용 프로그램이 있고 열린 CView의 자식으로 WPF 창을 만들려고합니다.CView의 자식 WPF 창 크기 조정

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

이 제발 도와주세요 :

나는 문제를 설명하는 샘플 응용 프로그램을 업로드했습니다.

감사합니다.

+0

이 문제가 두 개 있습니다. 나는':: OnSize'를 구부리고 심지어 정확하게 크기를 재조정하지도 않는다. 끔찍한데. – Jordan

답변

-1

SetParent를 사용한 후 내 자식 창의 Resize 또는 DragMove를 사용하면 NewSize가 매우 커질 수있는 동일한 문제가있었습니다. 내 차이점은 내 주 앱이 WPF인데, &은 별도의 스레드에서 하위 WPF 창을 실행합니다. 이 코드를 사용하여 내 문제가 도망 갔어요 내 setParent가 불려 갔을 때를 제거한 후

typeof(System.Windows.Window).InvokeMember(“_ownerHandle”, BindingFlags.Public |  BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetField, null, YOUR_CHILD_WINDOW, new object[] { YOUR_PARENT_HANDLE }); 

설정할 수 있었다 : 누군가가 반사를 사용하여 부모에게 자녀의 소유자를 설정하는 방법에 댓글을 어디에

내 상사는이 링크 1 발견 내 자식 창의 소유자가 별도의 스레드에서 실행되는 기본 WPF 창으로 이동합니다.