有时候根据实际需要,比如MFC单文档程序视图里内容少、空白一大半,需要调整MFC单文档程序窗口大小、限制单文档的最大最小尺寸。
1、 要控制一个框架的的最大最小尺寸,需要做两件事情,在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;
}
2、在CFrameWnd的继承类的PreCreateWindow函数中去掉WS_MAXIMIZEBOX消息,禁止“最大化”。
BOOL CMyFrameWnd::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style &= ~WS_MAXIMIZEBOX;
return CFrameWnd::PreCreateWindow(cs);
}
3、进行1、2步以后,可能会出现滚动条,重载WM_NCCALCSIZE消息,在OnNcCalcSize函数中写入以下2个语句。
ShowScrollBar(SB_HORZ, FALSE);
//去除水平滚动条
ShowScrollBar(SB_VERT, FALSE);
//去除垂直滚动条