1.在类的头文件中加入函数申明 (.h文件)
- afx_msg void OnGetMinMaxInfo(MINMAXINFO *lpMMI);
2.在消息映射中添加 (.cpp文件)
ON_WM_GETMINMAXINFO()
即:
- BEGIN_MESSAGE_MAP(CMyDlg, CDialogEx)
- ON_WM_GETMINMAXINFO()
- END_MESSAGE_MAP()
3.在类的主体文件中加入函数实现 (.cpp文件)
- void MyDlg::OnGetMinMaxInfo(MINMAXINFO *lpMMI)
- {
- CPoint pt(320,250); //定义宽和高
- lpMMI-> ptMinTrackSize=pt; //限制最小宽和高
- CDialog::OnGetMinMaxInfo(lpMMI);
- }
FROM: http://paulfzm.iteye.com/blog/968652
======================================================
如何控制窗口框架的最大最小尺寸
答:
要控制一个框架的的最大最小尺寸
,
你需要做两件事情
.
在
CFrameWnd
的继承
类
中处理消息
WM_GETMINMAXINFO,
结构
MINMAXINFO
设置了整个窗口类的限制
,
因此
记
住要考虑工具条
,
卷动条等等的大小
.
//
最大最小尺寸的象素点
-
示例
#define MINX 200
#define MINY 300
#define MAXX 300
#define MAXY 400
voidCMyFrameWnd::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
CRectrectWindow;
GetWindowRect(&rectWindow);
CRectrectClient;
GetClientRect(&rectClient);
// get offset of toolbars, scrollbars, etc.
intnWidthOffset = rectWindow.Width() - rectClient.Width();
intnHeightOffset = 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;
returnCFrameWnd::PreCreateWindow(cs);
}
如何控制窗口框架的最大最小尺寸 答:要控制一个框架的的最大最小尺寸,你需要做两件事情.在CFrameWnd的继承类 中处理消息WM_GETMINMAXINFO,结构MINMAXINFO设置了整个窗口类的限制,
因此记 住要考虑工具条,卷动条等等的大小.
// 最大最小尺寸的象素点 - 示例
#define MINX 200
#define MINY 300
#define MAXX 300
#define MAXY 400
voidCMyFrameWnd::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) {
CRectrectWindow;
GetWindowRect(&rectWindow);
CRectrectClient;
GetClientRect(&rectClient);
// get offset of toolbars, scrollbars, etc.
intnWidthOffset = rectWindow.Width() - rectClient.Width();
intnHeightOffset = 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;
returnCFrameWnd::PreCreateWindow(cs);
}
FROM: 如何控制窗口框架的最大最小尺寸