VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1197|回复: 7

[交流] mfc控件随着窗口大小变化

[复制链接]
29_avatar_middle
最佳答案
1 
online_vip 发表于 2018-2-24 12:21:32 | 显示全部楼层 |阅读模式
在创建tab标签页控件的时候发现,创建出来的子对话框大小和主对话框大小并不一致。在右侧和下侧会有很大的间隙,显得很不美观,需要动态调整控件的大小。

mfc控件随着窗口大小变化

找论坛客服帮忙看了下(不得不说论坛客服指导还是很给力的,有问必答),不过修改的list控件的大小变化,如果添加了其他的控件还是不行,于是自己又百度修改了下,分享下解决方法。

解决方法很简单

1、在子类的(注意不是主类,你添加的tab子窗口的类)头文件里面添加 POINT Old;

2、在OnInitDialog()中添加
  1. CRect rect;   
  2. GetClientRect(&rect); //取客户区大小   
  3. Old.x=rect.right-rect.left;
  4. Old.y=rect.bottom-rect.top;
复制代码


3、添加 WM_SIZE消息
  1. if(nType==SIZE_RESTORED||nType==SIZE_MAXIMIZED)//窗体大小发生变动。处理函数resize
  2. {
  3.   resize();
  4. }
复制代码


4、添加reseze函数
  1. void CMyDialog::resize()
  2. {
  3. float fsp[2];
  4. POINT Newp; //获取现在对话框的大小
  5. CRect recta;   
  6. GetClientRect(&recta); //取客户区大小   
  7. Newp.x=recta.right-recta.left;
  8. Newp.y=recta.bottom-recta.top;
  9. fsp[0]=(float)Newp.x/Old.x;
  10. fsp[1]=(float)Newp.y/Old.y;
  11. CRect Rect;
  12. int woc;
  13. CPoint OldTLPoint,TLPoint; //左上角
  14. CPoint OldBRPoint,BRPoint; //右下角
  15. HWND hwndChild=::GetWindow(m_hWnd,GW_CHILD); //列出所有控件   
  16. while(hwndChild)   
  17. {   
  18.   woc=::GetDlgCtrlID(hwndChild);//取得ID
  19.   GetDlgItem(woc)->GetWindowRect(Rect);   
  20.   ScreenToClient(Rect);   
  21.   OldTLPoint = Rect.TopLeft();   
  22.   TLPoint.x = long(OldTLPoint.x*fsp[0]);   
  23.   TLPoint.y = long(OldTLPoint.y*fsp[1]);   
  24.   OldBRPoint = Rect.BottomRight();   
  25.   BRPoint.x = long(OldBRPoint.x *fsp[0]);   
  26.   BRPoint.y = long(OldBRPoint.y *fsp[1]); //高度不可读的控件(如:combBox),不要改变此值.
  27.   Rect.SetRect(TLPoint,BRPoint);   
  28.   GetDlgItem(woc)->MoveWindow(Rect,TRUE);
  29.   hwndChild=::GetWindow(hwndChild, GW_HWNDNEXT);   
  30. }
  31. Old=Newp;
复制代码


注:BRPoint.y = long(OldBRPoint.y *fsp[1]); //高度不可读的控件(如:combBox),不要改变此值.
这点没太说清楚,遍历控件,如果遍历到combBox的时候,加判断,不要执行这句代码,也就是不要试图改变BRPoint.y的值,否则的话,combBox内就会没内容,困扰了好长时间才找到原因,是因为combBox的高度不可读。
另外,如果界面里添加了静态文本控件,修改将默认的静态文本控件的ID修改(随意修改,不是默认的即可),否则会出现界面控件位置错乱

修改以后的界面如下,比之前美观很多。

mfc控件随着窗口大小变化

工程源码下载地址,回复后可见:

游客,如果您要查看本帖隐藏内容请回复




上一篇:一个Hello World引发的故事
下一篇:mfc连接mysql数据库实例
76_avatar_middle
最佳答案
0 
在线会员 发表于 2018-3-5 20:08:12 | 显示全部楼层
虽然不懂mfc,但是也来学习下
08_avatar_middle
最佳答案
0 
在线会员 发表于 2018-3-6 21:38:21 | 显示全部楼层
mfc控件随着窗口大小变化
34_avatar_middle
最佳答案
0 
在线会员 发表于 2018-3-7 09:11:22 | 显示全部楼层
学习中....谢谢分享
37_avatar_middle
最佳答案
0 
在线会员 发表于 2019-1-19 12:50:26 | 显示全部楼层
学习一下控件随着窗口大小变化
68_avatar_middle
最佳答案
0 
在线会员 发表于 2019-2-26 11:57:47 | 显示全部楼层
66666666666666
75_avatar_middle
最佳答案
0 
在线会员 发表于 2019-11-21 12:18:13 | 显示全部楼层
mfc控件随着窗口大小变化mfc控件随着窗口大小变化
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-12-11 06:08

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表