BOOL CMainFrame::PreCreateWindow(CREATESTRUCT&cs)
{
if( !CFrameWnd::PreCreateWindow(cs))
return FALSE
// TODO: Modify the Window class or styles here bymodifying
// the CREATESTRUCTcs
cs.dwExStyle&= ~WS_EX_CLIENTEDGE
cs.lpszClass = AfxRegisterWndClass(0)
cs.style |= WS_CLIPCHILDREN|WS_CLIPSIBLINGS
cs.cx = 1000//窗口宽度
cs.cy = 800//窗口高度
return TRUE
}
mfc 窗口大小变化时,如何让窗口内部控件也一起随比例改变位置,解决办法:
对应窗口的属性Maximize Box和Minimize Box设置为true,从而能够使窗口最大化和最小化,Border属性设置为Resizing从而可以改变窗口的大小。
在消息有个WM_SIZE,添加函数OnSize,这样可以在函数内调整控件的大小,特别说明很多代码中利用当前控件比值与窗口大小比值再乘上当前窗口大小来改变控件大小,但是由于精度的问题,调整多次就会出问题,那么这里可以利用一个结构体保存每个控件与原窗口的比值。
如以上回答未解决问题,请尝试:
使用SetWindowPos函数。
使用MoveWindow函数
可以用滚动视图CSrcollView,设置滚动范围800*600,这样即使窗口缩小了,实际客户区仍有这么大;可以禁止系统菜单的放缩和最大化,通过MoveWindow或者初始化窗口属性cs变量固定窗口大小,不可缩小也不可放大;
截获框架CMainFrame的OnSize,在里面强行设置(不推荐,效果不好)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
if(cx<800)
{
cx = 800
CRect rect
GetWindowRect(rect)
rect.right = rect.left+cx
MoveWindow(rect,true)
}
CSDIFrameWnd::OnSize(nType, cx, cy)
// TODO: Add your message handler code here
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)