// PATCH: MDIClient fullscreen height and scrollbars bugfixes // References and documentation links for this code: // https://msdn.microsoft.com/en-us/library/windows/desktop/ms644909.aspx // https://msdn.microsoft.com/en-us/library/windows/desktop/ms632602.aspx // ... // main window procedure LRESULT CALLBACK MainWndProc(HWND wnd, UINT msg, WPARAM wparm, LPARAM lparm) { CLIENTCREATESTRUCT ccs; HWND wh; RECT rc; // ... // get MDI client window handle wh = GetDlgItem(wnd, 0xCAC); // ... switch (msg) { // ... case WM_CREATE: ccs.hWindowMenu = GetSubMenu(GetMenu(wnd), WINDOWMENU); ccs.idFirstChild = IDM_WINDOWCHILD; // get parent window area GetClientRect(wnd, &rc); // create the MDI client window wh = CreateWindow( TEXT("MDIClient"), NULL, WS_CHILD | WS_HSCROLL | WS_VSCROLL | WS_VISIBLE, 0, 0, rc.right, rc.bottom, // windows size wnd, (HMENU) 0xCAC, GetModuleHandle(NULL), &ccs ); if (!wh) { MessageBox(wnd, TEXT("CreateWindow() for MDIClient failed!"), NULL, MB_ICONERROR); return(-1); } break; // ... case WM_SIZE: // get parent window area GetClientRect(wnd, &rc); // resize MDI client window MoveWindow(wh, 0, 0, rc.right, rc.bottom, TRUE); // rearrange minimized items for new MDI client window size PostMessage(wh, WM_MDIICONARRANGE, 0, 0); // PATCH: DO NOT return() here! // (so many bad examples on Internet which do return(0) here) // this message MUST BE passed to DefFrameProc() // or after minimize/restore main window MDIClient window // got broken horizontal and vertical scroll bars // (if any of the MDI children goes out of right or bottom // MDIClient window area) break; // ... } return(DefFrameProc(wnd, wh, msg, wparm, lparm)); } // MDI children procedure LRESULT CALLBACK MDIChildProc(HWND wnd, UINT msg, WPARAM wparm, LPARAM lparm) { // ... switch (msg) { // ... // PATCH: Windows MDI bottom padding bug at fullscreen case WM_GETMINMAXINFO: if (IsZoomed(wnd)) { ((PMINMAXINFO) lparm)->ptMaxTrackSize.y += GetSystemMetrics(SM_CYCAPTION); } break; // ... } return(DefMDIChildProc(wnd, msg, wparm, lparm)); }
2015.04.16