/* * MDIChildHandleMessage - handle messages for MDI child windows */ int MDIChildHandleMessage( HWND hwnd, WPI_MSG msg, WPI_PARAM1 wparam, WPI_PARAM2 lparam, WPI_MRESULT *lrc ) { #ifndef __OS2_PM__ bool iconic; #endif wparam = wparam; lparam = lparam; lrc = lrc; switch( msg ) { case WM_CREATE: fixSystemMenu( hwnd ); break; case WM_SIZE: case WM_MOVE: // newChildPositions(); break; #ifndef __OS2_PM__ case WM_SYSCOMMAND: return( processSysCommand( hwnd, msg, wparam, lparam, lrc ) ); #endif case WM_DESTROY: finiWindow( hwnd ); if( childrenMaximized && mdiHead == NULL ) { doRestoreAll(); childrenMaximized = TRUE; } if( currentWindow == hwnd ) { currentWindow = NULLHANDLE; } break; case WM_SETFOCUS: currentWindow = hwnd; if( childrenMaximized ) { mdiInfo.set_window_title( hwnd ); setMaximizedMenuConfig( hwnd ); } break; #ifndef __OS2_PM__ case WM_COMMAND: if( childrenMaximized && LOWORD( wparam ) >= 0xF000 ) { _wpi_sendmessage( currentWindow, WM_SYSCOMMAND, wparam, lparam ); return( TRUE ); } break; case WM_NCLBUTTONDBLCLK: iconic = _wpi_isiconic( currentWindow ); if( !childrenMaximized && (wparam == HTCAPTION) && iconic ) { _wpi_sendmessage( currentWindow, WM_SYSCOMMAND, SC_MAXIMIZE, 0L ); *lrc = 0; return( TRUE ); } break; #endif } return( FALSE ); } /* MDIChildHandleMessage */
QMdiSubWindow * CMDIArea::addSubWindow(QWidget * widget, Qt::WindowFlags windowFlags) { QMdiSubWindow * const subWindow = QMdiArea::addSubWindow(widget, windowFlags); subWindow->installEventFilter(this); fixSystemMenu(subWindow); // Manual arrangement mode enableWindowMinMaxFlags(true); if (m_mdiArrangementMode == ArrangementModeManual) { // Note that the window size/maximization may be changed later by a session restore. // If we already have an active window, make the new one simular to it if (activeSubWindow()) { if (activeSubWindow()->isMaximized()) { subWindow->showMaximized(); // Maximize the new window } else { // Make new window the same size as the active window and move it slightly. subWindow->resize(activeSubWindow()->size()); QRect subWinGeom = activeSubWindow()->geometry(); static const int MOVESIZE = 30; subWinGeom.translate(MOVESIZE, MOVESIZE); // If it goes off screen, move it almost to the top left if (!frameRect().contains(subWinGeom)) subWinGeom.moveTo(MOVESIZE, MOVESIZE); subWindow->setGeometry(subWinGeom); } } else { //set the window to be big enough subWindow->resize(400, 400); } subWindow->raise(); } else { // Automatic arrangement modes enableWindowMinMaxFlags(false); triggerWindowUpdate(); } return subWindow; }