版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、般情况下,我们新建的对话框,里面的确定”和:取消”按钮,在对话框最大化得时候,不会一起变大的,而是保持原来的大小。最简单的情况:当我们点击最大化按钮的时候,对话框会最大化,但是控件确定”和取消”不会跟着变大。 如果我们在对话框上面有多少控件, 那么会很丑,而且很不实用,最大化本来就是想看的更 清楚嘛。我们可以采取下面的措施:对话框也是窗口,最大化是对窗口大小的改变,而在win dowsmessage handle中有个 WM_SIZE的消息,该消息在窗口大小发生变化的时候会产生。那么 我们可以根据这个消息,在窗口大小发生变化的时候,利用MoveWindow()函数来重新设置各个控件的大小。还是
2、以上面最简单的情况为例子:1首先要知道对话框大小是否改变,改变了多少,我们应该记录当前对话框的大小。在对话框类中添加成员变量 CRect m_rect 他是用来记录当前对话框的大小。我们在 OnInitDialog() 函数中获取对话框创建时的大小: GetClientRect(&m_rect);2 增加消息 WM_SIZE 的消息响应函数 OnSize(): 只要对话框大小发生变化,就会调用该函 数。3在OnSize()函数中增加如下代码:(最简单的为例子,就一个确定按钮和取消按钮)void CTestDlg:OnSize(UINT nType, int cx, int cy)CDi
3、alog:OnSize(nType, cx, cy);/ TODO: Add your message handler code herefor (int i=1;i<=2;i+)/因为是两个控件,所以这里用了循环CWnd *pWnd;pWnd = GetDlgltem(i);/获取ID为i的空间的句柄,因为 确认” ID为1,取消” D为2if(pWnd) /判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建CRect rect;/获取控件变化前的大小pWnd->GetWindowRect(&rect);ScreenToClient(&rect /将控
4、件大小转换为在对话框中的区域坐标/cx/m_rect.Width() 为对话框在横向的变化比例rect.left=rect.left*cx/m_rect.Width();/ 调整控件大小rect.right=rect.right*cx/m_rect.Width();rect.top=rect.top*cy/m_rect.Height();rect.bottom=rect.bottom*cy/m_rect.Height();pWnd->MoveWindow(rect);/ 设置控件大小GetClie ntRect(&m _rect); 将变化后的对话框大小设为旧大小然后运行,当对话
5、框最大化的时候,两个按钮也变大了。個为全屏图太大,我只截取了右上角的部分)PS:其实这种方法实现起来简单,但是是存在问题的,如果界面有很多控件,那个当你拖拽窗口的角的时候, 经过几次变大变小, 你会发现其实里面的控件已经失真了,就不是原来 的长宽比例了。 那么要实现不管窗口怎么变, 里面的控件不但大小跟着变, 而且大小比例也 跟着变,那就不是这个 OnSize 函数那么简单了,实现起来有点复杂。等我掌握了这个复杂 的方法,一定会拿来分享的。mfc 控件大小随窗体改变而改变 如果对话框或视类的大小调后,控件的大小和位置没有变化,界面看起来会很不爽 .控件是从 CWnd 派生的,但不能使用 Set
6、WindowPos() 或 OnSize() 或 OnSizing() 来改 变其大小,应在父窗口的 WM_SIZE 消息中使用 MoveWindow() 来进行调整。VC+ 之根据对话框大小调整控件大小1、在对话框类中加入成员变量 CRect m_rect; 用于保存对话框大小变化前的大小;2、在对话框的 OnInitDialog() 函数中获取对话框创建时的大小:GetClientRect(&m_rect);3、在 WM_SIZE 的响应函数 OnSize() 中加入以下代码:CWnd *pWnd;pWnd = GetDlgItem(IDC_LIST); /获取控件句柄if(pWn
7、d)/ 判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建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.top=rect.top*cy/m_rect.Height(); rec
8、t.bottom=rect.bottom*cy/m_rect.Height(); pWnd->MoveWindow(rect);/ 设置控件大小 GetClientRect(&m_rect);/ 将变化后的对话框大小设为旧大小如果是里面只有一两个控件倒好办,但控件太多的话这样做是不是重复劳动太多了?有没有更好的办法啊?视类中加成员函数和成员变量:void SetControlInfo(WORD CtrlId);protected:int m_old_cx,m_old_cy;CDWordArray m_control_info;构造函数中初始化:m_old_cx = m_old_c
9、y = 0;加控件信息的函数定义:void CTestFormView:SetControlInfo(WORD CtrlId)m_control_info.Add(CtrlId);修改 OnSize 函数:void CTestFormView:OnSize(UINT nType, int cx, int cy) if(cx=0 | cy=0)cx=800;cy=600;CFormView:OnSize(nType, cx, cy);(float)(float)cx/(float)m_old_cx);(float)(float)cy/(float)m_old_cfloatdx_percent=(
10、m_old_cx=0)?1floatdy_percent=(m_old_cy=0)?1y);if(m_old_cx)CRect WndRect;CWnd *pWnd;for(int i = 0; i < m_control_info.GetSize(); i+)pWnd = GetDlgItem(m_control_infoi); if(!pWnd)TRACE( "Control ID - %d NOT FOUND!n ",m_control_infoi);continue;pWnd-> GetWindowRect(&WndRect);ScreenToClient(&WndRect);WndRect.left = (int)(WndRect.left*dx_percent);WndRect.right = (int)(WndRect.right* dx_percent);WndRect.bottom = (int)(WndRect.bottom*dy_percent);WndRect.top = (
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年超额保险合同赔付限制
- 2025版城市更新改造项目投标承诺书规范范本3篇
- 2025版木雕工艺品制作木工分包合同范本4篇
- 2025版企业销售业务员合作协议范本3篇
- 2025年度猪圈建造与农业循环经济合同4篇
- 二零二五版电影院装修升级合同范本3篇
- 2025版学校教师聘用合同范本:职称晋升条款详解3篇
- 2025年度体育场馆草坪铺设与维护服务合同4篇
- 2025年度货车司机劳动合同(附交通事故责任及赔偿)
- 2025年度智能科技股权众筹协议书模板
- 高考语文复习【知识精研】《千里江山图》高考真题说题课件
- 河北省承德市2023-2024学年高一上学期期末物理试卷(含答案)
- 高中物理斜面模型大全(80个)
- 012主要研究者(PI)职责药物临床试验机构GCP SOP
- 农耕研学活动方案种小麦
- 2024年佛山市劳动合同条例
- 污水管网规划建设方案
- 城镇智慧排水系统技术标准
- 采购管理制度及流程采购管理制度及流程
- 五年级美术下册第9课《写意蔬果》-优秀课件4人教版
- 节能降耗课件
评论
0/150
提交评论