版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一一个基于对话框的MFC界面,怎么样才能让对话框里的控件能和对话框同比例变小变大?今天我一直想解决这个问题,这是师姐留给我的任务。经过在网上的大量搜素,终于找到了解决方法,其实比较简单。 一般情况下,我们新建的对话框,里面的“确定”和:取消”按钮,在对话框最大化得时候,不会一起变大的,而是保持原来的大小。 最简单的情况: 当我们点击最大化按钮的时候,对话框会最大化,但是控件“确定”和“取消”不会跟着变大。如果我们在对话框上面有多少控件,那么会很丑,而且很不实用,最大化本来就是想看的更清楚嘛。
2、60; 我们可以采取下面的措施:对话框也是窗口,最大化是对窗口大小的改变,而在windows message handle中有个WM_SIZE的消息,该消息在窗口大小发生变化的时候会产生。那么我们可以根据这个消息,在窗口大小发生变化的时候,利用MoveWindow()函数来重新设置各个控件的大小。 还是以上面最简单的情况为例子: 1 首先要知道对话框大小是否改变,改变了多少,我们应该记录当前对话框的大小。 在对话框类中添加成员变量 CRect m_rect 他是用来记录当前对话框的大小。我们在OnIn
3、itDialog()函数中获取对话框创建时的大小:GetClientRect(&m_rect); 2 增加消息WM_SIZE的消息响应函数 OnSize():只要对话框大小发生变化,就会调用该函数。 3 在OnSize()函数中增加如下代码:(最简单的为例子,就一个确定按钮和取消按钮)来源:() - MFC:如何让对话框中的控件和对话框一起变小变大_萧萧_新浪博客 void CTestDlg:OnSize(UINT nType, int cx, int cy) CDialog:OnSize(nType, cx, cy);
4、; / TODO: Add your message handler code here for (int i=1;i<=2;i+) /因为是两个控件,所以这里用了循环 CWnd *pWnd; pWnd = GetDlgItem(i); /获取ID为i的空间的句柄,因为“确认”ID为1,“取消”ID为2 if(pWnd) /判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
5、160; CRect rect; /获取控件变化前的大小 pWnd->GetWindowRect(&rect); ScreenToClient(&rect/将控件大小转换为在对话框中的区域坐标 /cx/m_rect.Width()为对话框在横向的变化比例 rect.left=rect.left*cx/m_rect.Width();/调整控件大小 rect.right=rect.rig
6、ht*cx/m_rect.Width(); rect.top=rect.top*cy/m_rect.Height(); rect.bottom=rect.bottom*cy/m_rect.Height(); pWnd->MoveWindow(rect);/设置控件大小 GetClientRect(&m_rect);/ 将变化后的对话框大小设为旧大小 然后运行 ,当对话框最大化的时候,两个按钮也变大了。
7、0; (因为全屏图太大,我只截取了右上角的部分) PS:其实这种方法实现起来简单,但是是存在问题的,如果界面有很多控件,那个当你拖拽窗口的角的时候,经过几次变大变小,你会发现其实里面的控件已经失真了,就不是原来的长宽比例了。那么要实现不管窗口怎么变,里面的控件不但大小跟着变,而且大小比例也跟着变,那就不是这个OnSize函数那么简单了,实现起来有点复杂。等我掌握了这个复杂的方法,一定会拿来分享的。二mfc 控件大小随窗
8、体改变而改变 如果对话框或视类的大小调后,控件的大小和位置没有变化,界面看起来会很不爽. 控件是从CWnd派生的,但不能使用SetWindowPos()或OnSize()或OnSizing()来改变其大小,应在父窗口的WM_SIZE消息中使用MoveWindow()来进行调整。VC+之根据对话框大小调整控件大小1、在对话框类中加入成员变量CRect m_rect;用于保存对话框大小变化前的大小;2、在对话框的OnInitDialog()函数中获取对话框创建时的大小:GetClientRect(&m_rect);3、在WM_SIZE的响应函数OnSize()中加入以下代码:CWnd *p
9、Wnd;pWnd = GetDlgItem(IDC_LIST); /获取控件句柄if(pWnd)/判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建CRect rect; /获取控件变化前大小pWnd->GetWindowRect(&rect);ScreenToClient(&rect);/将控件大小转换为在对话框中的区域坐标/cx/m_rect.Width()为对话框在横向的变化比例rect.left=rect.left*cx/m_rect.Width();/调整控件大小rect.right=rect.right*cx/m_rect.Width();rect
10、.top=rect.top*cy/m_rect.Height();rect.bottom=rect.bottom*cy/m_rect.Height();pWnd->MoveWindow(rect);/设置控件大小GetClientRect(&m_rect);/将变化后的对话框大小设为旧大小三 如果是里面只有一两个控件倒好办,但控件太多的话这样做是不是重复劳动太多了? 有没有更好的办法啊?视类中加成员函数和成员变量: void SetControlInfo(WORD CtrlId); pr
11、otected: int m_old_cx,m_old_cy; CDWordArray m_control_info; 构造函数中初始化: m_old_cx = m_old_cy = 0; 加控件信息的函数定义: void CTestFormView:SetControlInfo(WORD
12、CtrlId) m_control_info.Add(CtrlId); 修改OnSize函数: void CTestFormView:OnSize(UINT nType, int cx, int cy) if(cx=0 | cy=0)
13、 cx=800; cy=600; CFormView:OnSize(nType, cx, cy); float dx_percent = (m_old_cx =0)?
14、1 : (float)(float)cx/(float)m_old_cx); float dy_percent = (m_old_cy =0)? 1 : (float)(float)cy/(float)m_old_cy); if(m_old_cx)
15、 CRect WndRect; CWnd *pWnd; for(int i = 0; i < m_control_info.GetSize(); i+)
16、0; pWnd = GetDlgItem(m_control_infoi); if(!pWnd)
17、 TRACE( "Control ID - %d NOT FOUND!n ",m_control_infoi);
18、160; continue; pWnd-> GetWindowRect(&a
19、mp;WndRect); ScreenToClient(&WndRect); WndRect.left = (int)(WndRect.left*dx_percent); WndRect.right = (int)(WndRect.right* dx_percent); WndRect.bottom = (int)(W
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 法务培训采购合同范本大全
- 政府采购委托合同书
- 企业临时工劳务派遣合同
- 咨询策划服务合同范本
- 厂房改造装修合同模板
- 水稻购销合同协议书
- 《女性生殖生理》课件
- 知识图谱支持下的城乡规划知识体系数字化建设:优势、关键技术与构建应用
- 2025年果洛货运上岗证考试题库答案
- 冷轧变形对FeMnCrNi中熵合金在液态铅铋中腐蚀行为的影响
- 2024-2030年中国汽车驾驶培训市场发展动态与前景趋势预测报告
- 中铁十四局合同范本
- 医院课件:《食源性疾病知识培训》
- 浙教版七年级数学下册单元测试题及参考答案
- 华为人才发展与运营管理
- 卓有成效的管理者读后感3000字
- 七年级下册-备战2024年中考历史总复习核心考点与重难点练习(统部编版)
- 岩土工程勘察服务投标方案(技术方案)
- 实验室仪器设备验收单
- 新修订药品GMP中药饮片附录解读课件
- 非标自动化设备技术规格书和验收标准(模板)
评论
0/150
提交评论