有时候根据实际需要,比如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);//去除垂直滚动条
本文介绍如何通过重写WM_GETMINMAXINFO消息处理函数来控制MFC应用程序窗口的最大最小尺寸,并通过修改PreCreateWindow函数禁用窗口最大化按钮,同时提供去除滚动条的方法。
4414

被折叠的 条评论
为什么被折叠?



