要控制一个框架的的最大最小尺寸,你需要做两件事情.在CFrameWnd的继承类中
处理消息WM_GETMINMAXINFO,结构MINMAXINFO设置了整个窗口类的限制,因此记
住要考虑工具条,卷动条等等的大小.
// 最大最小尺寸的象素点 - 示例
#define MINX 200
#define MINY 300
#define MAXX 300
#define MAXY 400
void CMyFrameWnd::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
CRect rectWindow;
GetWindowRect(&rectWindow);
CRect rectClient;
GetClientRect(&rectClient);
// get offset of toolbars, scrollbars, etc.
int nWidthOffset = rectWindow.Width() - rectClient.Width();
int nHeightOffset = rectWindow.Height() - rectClient.Height();
lpMMI->ptMinTrackSize.x = MINX + nWidthOffset;
lpMMI->ptMinTrackSize.y = MINY + nHeightOffset;
lpMMI->ptMaxTrackSize.x = MAXX + nWidthOffset;
lpMMI->ptMaxTrackSize.y = MAXY + nHeightOffset;
}
第二步,在CFrameWnd的继承类的PreCreateWindow函数中去掉WS_MAXIMIZEBOX消
息,否则在最大化时你将得不到预料的结果.
BOOL CMyFrameWnd::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style &= ~WS_MAXIMIZEBOX;
return CFrameWnd::PreCreateWindow(cs);
}
另添几个例子
操作系统发送一个WM-GETMAXMININFO消息来确定窗口的位置、大小以及追踪尺寸,
使用ClassWizard限制窗口的追踪尺寸,下面的例子将窗口的追踪尺寸限制为1/4屏幕大
小:
void CMainFrame : : OnGetMinMaxInfo (MINMAXINFO FAR *IpMMI)
{
IpMMI—>ptMaxTrackSize. x=GetSystemMetrics (SM_CXSCREEN) /2;
IpMMI—>ptMaxTrackSize. y =GetSystemMetrics (SM_CYSCREEN) /2;
CMDIFrameWnd: : OnGetMinMaxInfo(IpMMI);
}
对话框限制最小尺寸
void CMainDialog::OnGetMinMaxInfo(MINMAXINFO *lpMMI)
{
lpMMI->ptMinTrackSize = CPoint(MINX,MINY);
}

