MFC中控件大小随对话框大小动态变化

来源:互联网 发布:一直是正在准备windows 编辑:程序博客网 时间:2024/05/15 00:49

首先在***Dlg.h头文件中定义

[cpp] view plaincopyprint?
  1. CRect m_rectmin;//用于存储初始化对话框的大小  
  2. CRect Button1Rectinit;//用于存储初始化控件的大小  

然后定义一个变化函数

[cpp] view plaincopyprint?
  1. //控件大小位置随对话框大小任意变化     
  2. //参数是控件ID  控件初始化参数lpRect    
  3. void autosize(UINT nID,LPRECT lpRect);  


在***Dlg.cpp文件中,添加如下代码:

[cpp] view plaincopyprint?
  1. ***Dlg::OnInitDialog()  
  2. {  
  3.     ******  
  4. GetWindowRect(&m_rectmin);//获取对话框大小初始值   
  5.       
  6. //获取对话框中各个控件的大小初始值   
  7. CWnd *pWnd;  
  8. pWnd = GetDlgItem(IDC_BUTTON1);         //获取按钮1句柄  
  9. pWnd->GetWindowRect(&Button1Rectinit);  
  10. ********  
  11. }  


 

[cpp] view plaincopyprint?
  1. void CPISProcToolsDlg::autosize(UINT nID,LPRECT lpRect)  
  2. {  
  3.     CWnd *pWnd;  
  4.     pWnd = GetDlgItem(nID);   //获取控件句柄   
  5.     if(!pWnd) return;         //判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建  
  6.   
  7.     CRect rect,recttemp;       //定义rect为控件变化后的参数      
  8.     GetClientRect(&recttemp);  //recttemp获取变化后对话框客户区大小  
  9.       
  10. //计算各个参数值,利用每个值主窗口的相对值计算   
  11.     rect.left = recttemp.Width() * lpRect->left/m_rectmin.Width();  
  12.     rect.right = recttemp.Width() * lpRect->right/m_rectmin.Width();  
  13.     rect.top = recttemp.Height() * lpRect->top/m_rectmin.Height();  
  14.     rect.bottom = recttemp.Height() * lpRect->bottom/m_rectmin.Height();  
  15.   
  16.     pWnd->MoveWindow(rect);//调整控件位置   
  17. }  


然后重载WM_SIZE函数和WM_OnGetMinMaxInfo函数:

[cpp] view plaincopyprint?
  1. void CPISProcToolsDlg::OnSize(UINT nType, int cx, int cy)  
  2. {  
  3.     CDialog::OnSize(nType, cx, cy);  
  4.   
  5.     // TODO: 在此处添加消息处理程序代码   
  6.     if(nType == SIZE_MINIMIZED) return;//防止窗口最小化时出现不可预知的问题  
  7.     autosize(IDC_BUTTON1,Button1Rectinit);  
  8. }  
[cpp] view plaincopyprint?
  1. void CPISProcToolsDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI)//限制对话框大小下限  
  2. {  
  3.     // TODO: 在此添加消息处理程序代码和/或调用默认值  
  4.     lpMMI-> ptMinTrackSize.x   =   m_rectmin.Width()   ;   //宽   
  5.     lpMMI-> ptMinTrackSize.y   =   m_rectmin.Height()   ;    //高   
  6.   
  7.     CDialog::OnGetMinMaxInfo(lpMMI);  
  8. }  


本文章来自于【http://blog.csdn.net/fc841105/article/details/6717111】

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 斐讯手环w1丢了怎么办 被罩拉链拉不合怎么办 拉链拉不合怎么办图解 塑料拉链不顺畅怎么办 隐形拉链不好拉怎么办 房东赶租客走怎么办 南京合租一间怎么办租房补贴 大学登错成绩怎么办 网游停服花了钱怎么办 北斗星x5油耗高怎么办 北斗星空调不凉怎么办 踏板摩托车费油怎么办 lol队友一直送怎么办 电脑信号无连接怎么办 电脑屏不全屏怎么办 电脑桌面不能显示全屏怎么办? 电脑黑屏无信号怎么办 笔记本电脑屏幕不显示怎么办 手机登录认证要怎么办 360手机丢失了怎么办 主播周年庆怎么办 学校选课系统进不去怎么办 选课系统关闭了怎么办 政府工作人员被威胁怎么办 报志愿忘记用户名怎么办 账号密码忘记了怎么办 商盟卡过期了怎么办 香港身份证掉了怎么办 简易注销有异议怎么办 左转红灯直行了怎么办 怀孕初期吃螃蟹怎么办 天下霸图打不过传闻怎么办 怀孕后期阴部痛怎么办 胎儿头大腿短怎么办 孕期大腿根疼怎么办 到工作单位催债怎么办 被讨债公司骚扰怎么办 要债人上门不走怎么办 阴阳师体力满了怎么办 狗吃了糯米怎么办 误给狗狗吃糯米怎么办