How to Prevent Mainframe Window from Being ReSizedID: Q133256
|
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.
You can prevent the Mainframe window of an AppWizard-generated SDI
application from being resized by following these steps:
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();
}
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);
}
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();
}
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 : kbcode kbMFC KbUIDesign kbVC
Version : 1.50 1.51 1.52 | 2.00 2.10 2.20
Platform : NT WINDOWS
Issue type :
Last Reviewed: August 5, 1999