Microsoft KB Archive/133256

= HOWTO: How to Prevent Mainframe Window from Being ReSized =

Article ID: 133256

Article Last Modified on 11/21/2006

-

APPLIES TO

 Microsoft Foundation Class Library 4.2, when used with:  Microsoft Visual C++ 1.5 Professional Edition

 Microsoft Visual C++ 1.51

 Microsoft Visual C++ 1.52 Professional Edition

 Microsoft Visual C++ 2.0 Professional Edition</li></ul>

 Microsoft Visual C++ 2.1</li></ul>

 Microsoft Visual C++ 2.2</li></ul>

 Microsoft Visual C++ 4.0 Standard Edition</li></ul>

 Microsoft Visual C++ 4.1 Subscription</li></ul>

 Microsoft Visual C++ 4.2 Enterprise Edition</li></ul>

 Microsoft Visual C++ 4.2 Professional Edition</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q133256

<div class="summary_section">

SUMMARY
Adding the WS_THICKFRAME windows style allows a window to be re-sized. By removing this from the Mainframe window's styles, you can prevent this window from being resized. Further, the MINMAXINFO structure stores the maximum and minimum tracking size of a window. The WM_GETMINMAXINFO message is sent to a window when the size or position of that window is about to change. An application can over-ride the handler for this message to set a window's default minimum or maximum tracking size.

<div class="moreinformation_section">

MORE INFORMATION
You can prevent the Mainframe window of an AppWizard-generated SDI application from being resized by following these steps:

<ol> Modify the IDR_MAINFRAME menu to add a top-level menu item (F&reeze!) with an ID of ID_FREEZE.</li> Add a public Boolean data member (say, BOOL freezeState) to the CMainFrame class to keep track of the current state of the application. Initialize freezeState to FALSE in the constructor of the CMainFrame class.</li>  Provide a command handler for the 'Freeze' menu item as follows: void CMainFrame::OnFreeze {     char* lpszFreeze = "F&reeze!"; char* lpszUnFreeze = "&UnFreeze!"; CMenu* pmenu = GetMenu; if (!freezeState) {

freezeState = TRUE; pmenu->ModifyMenu(ID_FREEZE, MF_STRING, ID_FREEZE,                                                      lpszUnFreeze); DWORD style = ::GetWindowLong(this->m_hWnd, GWL_STYLE);

// Remove the thick frame style and the Minimize, Maximize buttons style &= ~(WS_MAXIMIZEBOX|WS_MINIMIZEBOX|WS_THICKFRAME); ::SetWindowLong(this->m_hWnd, GWL_STYLE, style); }  else {      freezeState = FALSE; pmenu->ModifyMenu(ID_FREEZE, MF_STRING, ID_FREEZE,                                                     lpszFreeze); DWORD style = ::GetWindowLong(this->m_hWnd, GWL_STYLE);

// Add the thick frame style and the Minimize, Maximize buttons style |= (WS_MAXIMIZEBOX|WS_MINIMIZEBOX|WS_THICKFRAME); ::SetWindowLong(this->m_hWnd, GWL_STYLE, style); }     DrawMenuBar; }                       </li>  Provide a handler for the WM_GETMINMAXINFO message as follows: void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) {     if (freezeState) {         RECT rc;

GetWindowRect(&rc); lpMMI->ptMaxSize.x = rc.right - rc.left; lpMMI->ptMaxSize.y = rc.bottom - rc.top; lpMMI->ptMaxPosition.x = rc.left; lpMMI->ptMaxPosition.y = rc.top; lpMMI->ptMinTrackSize.x = rc.right - rc.left; lpMMI->ptMinTrackSize.y = rc.bottom - rc.top; lpMMI->ptMaxTrackSize.x = rc.right - rc.left; lpMMI->ptMaxTrackSize.y = rc.bottom - rc.top; }

CFrameWnd::OnGetMinMaxInfo(lpMMI); }                       </li> <li> If the mainframe is maximized, disable the Freeze menu option because there is no point in making the window non-resizable because a maximized window cannot be resized anyway: void CMainFrame::OnSize(UINT nType, int cx, int cy) {     CFrameWnd::OnSize(nType, cx, cy); CMenu* pmenu = GetMenu;

if (nType == SIZE_MAXIMIZED) pmenu->EnableMenuItem(ID_FREEZE, MF_DISABLED|MF_GRAYED); else pmenu->EnableMenuItem(ID_FREEZE, MF_ENABLED);

DrawMenuBar; }                       </li></ol>

NOTE: The steps to prevent the Mainframe window of an MDI application from being resized should be identical to the steps listed in this article. However, because there is more than one menu resource in an MDI application, you may want to design your application to add the 'Freeze' menu item to more than one menu resource.

Additional query words: kbinf 1.50 2.00 2.10 2.20 2.50 2.51 2.52 3.00 3.0 3.10 3.1 3.20 3.2 4.00 4.10 4.20

Keywords: kbhowto kbuidesign kbwndw KB133256

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.