小弟初学,请教窗口变化时界面上的控件如何重新排列 是不是一个一个控件计算、移动?那岂不是非常烦?我在OnDraw里面进行控件的重新放置,对吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 当窗口收到WM_SIZE消息时,对窗口上的控件进行调整。 我试着在OnSize里调整,但是可能是在窗口初始化时也会有WM_SIZE消息,所以程序有异常了。各位大虾再指点一下。还有,我调整后的窗口,为什么会有一个滚动条?确认了所有的控件都没有超出窗口范围啊。把窗口拉大一点滚动条就没有了,郁闷。 嗯,得加一个bool的成员变量,表示控件创建完成否,跳过初始化时的WM_SIZE消息一般是构造函数初始化为false,在OnCreate中设成true,在OnSize里面判断一下为true重排控件 用GetSafeHwnd()函数判断,即可以:if(GetDlgItem(IDC_YOURCTRLID)->GetSafeHwnd()){ CRect rect(70, 10, cx, 31);//你的相应控件的位置; GetDlgItem(IDC_YOURCTRLID)->MoveWindow(&rect);} 补充一下,窗口是FormView,单文档的。 在CView中的OnInitialUpdate()中添加下面代码:CSize SizeView;SizeView.cx = 0;SizeView.cx = 0;SetScrollSizes( MM_TEXT, SizeView );这样就行啦! 产生不产生滚动条,不是完全有控件确定,而是有你的资源中FormView的大小确定的,如果你的FormView资源的边界空白都不是很大的话,是不会有这个问题的解决办法,缩小FormView资源的大小,使它和控件空间大小匹配即可。 呵呵,搞定了,加了一个这个: SIZE sz; .... GetParentFrame()->RecalcLayout(); SetScaleToFitSize(sz);多谢各位大虾指点! 楼主,多谢厚爱,但是我觉得分给我给得多了,消受不起,呵呵,GGJJDDMM们会有意见的,^_^ 求助啊 MFC,GetSubMenu(int nPos)究竟完成了什么功能呢? 为什么处理图像不用VC.net而用VC6.0呢? 如何把节点移动到目标节点和其下一个节点之间 为哈消息响应函数没响应? 怎么创建MFC Dll和怎么使用MFC Dll 关于CD播放器的面板显示问题---急! 如何象压缩软件那样把多个文件打包到一个文件里? Debug and Release 急急!!!! 求助!!!! 但它说VK_ENTER没有申明,怎么改? SQL对时间的操作
一般是构造函数初始化为false,在OnCreate中设成true,在OnSize里面判断一下
为true重排控件
if(GetDlgItem(IDC_YOURCTRLID)->GetSafeHwnd())
{
CRect rect(70, 10, cx, 31);//你的相应控件的位置;
GetDlgItem(IDC_YOURCTRLID)->MoveWindow(&rect);
}
SizeView.cx = 0;
SizeView.cx = 0;
SetScrollSizes( MM_TEXT, SizeView );这样就行啦!
SIZE sz;
....
GetParentFrame()->RecalcLayout();
SetScaleToFitSize(sz);
多谢各位大虾指点!