WXLRESULT wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) { WXLRESULT rc = 0; bool processed = false; switch ( message ) { case WM_CLOSE: // if we can't close, tell the system that we processed the // message - otherwise it would close us processed = !Close(); break; case WM_SIZE: if ( m_hGripper ) { switch ( wParam ) { case SIZE_MAXIMIZED: ShowGripper(false); break; case SIZE_RESTORED: ShowGripper(true); } } // the Windows dialogs unfortunately are not meant to be resizable // at all and their standard class doesn't include CS_[VH]REDRAW // styles which means that the window is not refreshed properly // after the resize and no amount of WS_CLIPCHILDREN/SIBLINGS can // help with it - so we have to refresh it manually which certainly // creates flicker but at least doesn't show garbage on the screen rc = wxWindow::MSWWindowProc(message, wParam, lParam); processed = true; if ( HasFlag(wxFULL_REPAINT_ON_RESIZE) ) { ::InvalidateRect(GetHwnd(), NULL, false /* erase bg */); } break; } if ( !processed ) rc = wxDialogBase::MSWWindowProc(message, wParam, lParam); return rc; }
WXLRESULT wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) { WXLRESULT rc = 0; bool processed = false; switch ( message ) { #ifdef __WXWINCE__ // react to pressing the OK button in the title case WM_COMMAND: { switch ( LOWORD(wParam) ) { #ifdef __POCKETPC__ case IDOK: processed = DoOK(); if (!processed) processed = !Close(); #endif #ifdef __SMARTPHONE__ case IDM_LEFT: case IDM_RIGHT: processed = HandleCommand( LOWORD(wParam) , 0 , NULL ); break; #endif // __SMARTPHONE__ } break; } #endif case WM_CLOSE: // if we can't close, tell the system that we processed the // message - otherwise it would close us processed = !Close(); break; case WM_SIZE: #if wxUSE_DIALOG_SIZEGRIP if ( m_hGripper ) { switch ( wParam ) { case SIZE_MAXIMIZED: ShowGripper(false); break; case SIZE_RESTORED: ShowGripper(true); } } #endif // wxUSE_DIALOG_SIZEGRIP // the Windows dialogs unfortunately are not meant to be resizable // at all and their standard class doesn't include CS_[VH]REDRAW // styles which means that the window is not refreshed properly // after the resize and no amount of WS_CLIPCHILDREN/SIBLINGS can // help with it - so we have to refresh it manually which certainly // creates flicker but at least doesn't show garbage on the screen rc = wxWindow::MSWWindowProc(message, wParam, lParam); processed = true; if ( HasFlag(wxFULL_REPAINT_ON_RESIZE) ) { ::InvalidateRect(GetHwnd(), NULL, false /* erase bg */); } break; #ifndef __WXMICROWIN__ case WM_SETCURSOR: // we want to override the busy cursor for modal dialogs: // typically, wxBeginBusyCursor() is called and then a modal dialog // is shown, but the modal dialog shouldn't have hourglass cursor if ( IsModal() && wxIsBusy() ) { // set our cursor for all windows (but see below) wxCursor cursor = m_cursor; if ( !cursor.IsOk() ) cursor = wxCURSOR_ARROW; ::SetCursor(GetHcursorOf(cursor)); // in any case, stop here and don't let wxWindow process this // message (it would set the busy cursor) processed = true; // but return false to tell the child window (if the event // comes from one of them and not from ourselves) that it can // set its own cursor if it has one: thus, standard controls // (e.g. text ctrl) still have correct cursors in a dialog // invoked while wxIsBusy() rc = false; } break; #endif // __WXMICROWIN__ } if ( !processed ) rc = wxDialogBase::MSWWindowProc(message, wParam, lParam); return rc; }