2015-08-11 2 views
0

У меня есть приложение MFC MDI. Если я изменил размер моего окна, я получу окно с новым масштабом.MFC draw new at maximized window

BEGIN_MESSAGE_MAP(CmyView, CFormView) 
    ON_WM_SIZE() 
END_MESSAGE_MAP() 

    void CmyView::OnSize(UINT nType, int cx, int cy) 
{ 
    RECT rc; 
    GetClientRect(&rc); 

    if (::IsWindow(m_XYZ.GetSafeHwnd())) 
    { 
     m_XYZ.MoveWindow (rc.left, rc.top,rc.right,rc.bottom); 
    } 
} 

Все работает нормально, но если я нажму кнопку максимизации, экран не изменит размер. Я получу белую рамку справа и внизу. Есть ли какие-либо изменения, чтобы получить событие максимизации, например событие изменения размера (ON_WM_SIZE())?

Спасибо :)

+0

Вы посмотрели на обработку [WM_SYSCOMMAND] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms646360 (v = vs.85) .aspx) для SC_MAXIMIZE? – rrirower

+0

Я не могу в это поверить. WM_SIZE также отправляется, когда окно максимизируется. Должна быть другая проблема. Просто установите точку останова и максимизируйте ... – xMRi

+0

да, это странно. Если я нажму кнопку «Отменить», вызывается функция ONSize .... –

ответ

0

благодарит за ответы! Я нашел проблему.

Как я уже сказал, у меня есть приложение MDI. Я использовал событие ON_SIZE в первом и втором представлениях. Событие максимизации или минимизации вызывается только в MainFrame.

Но проблема все еще жива.

void CMainFrame::OnSize(UINT nType, int cx, int cy) 
{ 
    RECT rc; 
    GetClientRect(&rc); 

    CWnd* ViewWin = GetWindow(0); // this is my first view 

    if (::IsWindow(ViewWin->GetSafeHwnd())) 
    { 
    if (nType == SIZE_MAXIMIZED) 
     ViewWin->ShowWindow(SW_MAXIMIZE); 
    else if (nType == SIZE_MINIMIZED) 
     ViewWin->ShowWindow(SW_MINIMIZE); 
    else 
     ViewWin->MoveWindow (rc.left, rc.top,rc.right,rc.bottom); 
    } 

    CWnd* ViewWin1 = GetWindow(1); // this is my second view 
    if (::IsWindow(ViewWin1->GetSafeHwnd())) 
    { 
    if (nType == SIZE_MAXIMIZED) 
     ViewWin1->ShowWindow(SW_MAXIMIZE); 
    else if (nType == SIZE_MINIMIZED) 
     ViewWin1->ShowWindow(SW_MINIMIZE); 
    else 
     ViewWin1->MoveWindow (rc.left, rc.top,rc.right,rc.bottom); 
    } 
} 

Я попаду в максимизацию или минимизацию случаев, но ничего не произойдет.