一。大小和位置都改变

1.首先为窗体类添加CRect m_rect,该成员变量用来记录窗体的当前大小。

2.在类向导里面(Ctrl+W),为窗体添加消息WM_SIZE的响应函数OnSize();

注意if(nType==1) return;这一句必须添加,否则最小化恢复的时候会出错。

[cpp] view plaincopy

  1. void CPaperManagementDlg::OnSize(UINT nType, int cx, int cy)   
  2. {  
  3.     CDialog::OnSize(nType, cx, cy);  
  4.     if(nType==1) return;//最小化则什么都不做  
  5.     // TODO: Add your message handler code here  
  6.     CWnd *pWnd;   
  7.     pWnd = GetDlgItem(IDC_STATIC);  
  8.     ChangeSize(pWnd, cx, cy);  
  9.     pWnd = GetDlgItem(IDC_FILE_TREE);  
  10.     ChangeSize(pWnd, cx, cy);  
  11.     pWnd = GetDlgItem(IDC_EDIT_NAME);  
  12.     ChangeSize(pWnd, cx, cy);  
  13.     pWnd = GetDlgItem(IDC_EDIT_REFERENCE);  
  14.     ChangeSize(pWnd, cx, cy);  
  15.     pWnd = GetDlgItem(IDC_EDIT_SUMMARY);  
  16.     ChangeSize(pWnd, cx, cy);  
  17.     pWnd = GetDlgItem(IDC_EDIT_REMARK);  
  18.     ChangeSize(pWnd, cx, cy);  
  19.     pWnd = GetDlgItem(IDC_BUTTON_UPDATE);  
  20.     ChangeSize(pWnd, cx, cy);  
  21.     pWnd = GetDlgItem(IDC_BUTTON_SAVE);  
  22.     ChangeSize(pWnd, cx, cy);  
  23.     pWnd = GetDlgItem(IDC_STATIC_1);  
  24.     ChangeSize(pWnd, cx, cy);  
  25.     pWnd = GetDlgItem(IDC_STATIC_2);  
  26.     ChangeSize(pWnd, cx, cy);  
  27.     pWnd = GetDlgItem(IDC_STATIC_3);  
  28.     ChangeSize(pWnd, cx, cy);  
  29.     pWnd = GetDlgItem(IDC_STATIC_4);  
  30.     ChangeSize(pWnd, cx, cy);  
  31.     GetClientRect(&m_rect);// 将变化后的对话框大小设为旧大小     
  32. }  

其中函数ChangeSize是手动添加的用户函数,步骤如下

3.添加一个改变控件大小的用户函数,void ChangeSize(CWnd *pWnd, int cx, int cy),并编写代码

[plain] view plaincopy

  1. void CPaperManagementDlg::ChangeSize(CWnd *pWnd, int cx, int cy)  
  2. {  
  3.     if(pWnd)  //判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建   
  4.     {  
  5.         CRect rect;   //获取控件变化前的大小    
  6.         pWnd->GetWindowRect(&rect);  
  7.         ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标  
  8.   
     
  9.         //    cx/m_rect.Width()为对话框在横向的变化比例  
  10.         rect.left=rect.left*cx/m_rect.Width();//调整控件大小  
  11.         rect.right=rect.right*cx/m_rect.Width();  
  12.         rect.top=rect.top*cy/m_rect.Height();  
  13.         rect.bottom=rect.bottom*cy/m_rect.Height();  
  14.         pWnd->MoveWindow(rect);//设置控件大小  
  15.     }  
  16. }  

真正改变控件大小的函数是ChangeSize函数,在OnSize中不断调用ChangeSize函数从而改变窗体中所有控件的大小。

——————————————————————————————————————————————————————

以下内容来自网络:

二、 VC++之根据对话框大小仅调整控件位置
    1、在对话框类中加入成员变量CRect m_rect;用于保存对话框大小变化前的大小;
    2、在对话框的OnInitDialog()函数中获取对话框创建时的大小: 
    GetClientRect(&m_rect);
    3、在WM_SIZE的响应函数OnSize()中加入以下代码:
    CWnd *pWnd; 
    pWnd = GetDlgItem(IDC_BUTTON1);     //获取控件句柄
    if(nType==1) return;   //如果是窗体最小化则什么都不做
    if(pWnd)//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
    { 
    CRect rect;   //获取控件变化前大小
      LONG cWidth,cHeight; //记录控件的右部到窗体右部的距离,记录控件的底部到窗体底部的距离
      pWnd->GetWindowRect(&rect);
     ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
     cWidth=m_rect.Width()-rect.right;
     cHeight=m_rect.Height()-rect.bottom;
     rect.left=cx-rect.Width()-cWidth;
     rect.right=cx-cWidth;   
     rect.top=cy-rect.Height()-cHeight;
     rect.bottom=cy-cHeight;
     pWnd->MoveWindow(rect);//设置控件大小
    }
    GetClientRect(&m_rect);//将变化后的对话框大小设为旧大小

C:\\MFC控件大小随窗体大小而改变的更多相关文章

  1. [改善] dcef3 for Firemonkey 浏览器控件,拉动窗体大小会闪烁的问题

    问题:dcef3 for Firemonkey 浏览器控件,拉动窗体大小会闪烁的问题 修改源码:ceffmx.pas 找到 procedure TCustomChromiumFMX.Resize; 修 ...

  2. Delphi让控件随着窗口的大小而改变

    Delphi让控件随着窗口的大小而改变方法1:设置Anchors属性,把akLeft,akTop,akRight,akBottom都设为True.方法2:设置Align属性,其值为alClient.

  3. 【MFC】mfc控件位置调整和坐标确定 .

    摘自DoubleLi:   http://www.cnblogs.com/lidabo/archive/2012/08/24/2654678.html mfc控件位置调整和坐标确定 http://my ...

  4. MFC控件的SubclassDlgItem

    MFC控件的SubclassDlgItem 要在程序中创建新设计的控件,显然不能用自动创建的办法,因为对话框模板对新控件的特性一无所知.程序可以用手工方法创建控件,在调用派生类的Create函数时,派 ...

  5. MFC控件随窗口大小变化原理及实现

    本文主要针对MFC的dialog,实现控件随窗口大小变化. 原理:首先获取dialog的初始大小,当窗口发送变动时,调用OnSize事件和方法,计算缩放比例,然后对界面中的所有控件进行缩放和布局. 实 ...

  6. MFC 控件编程之水平滚动条跟垂直滚动条

    MFC 控件编程之水平滚动条跟垂直滚动条 一点水平滚动条的操作 首先在操作滚动条的时候.我们要知道滚动条的一些属性. 比如我们要设置 最大值 最小值. 以及每次递增的值是多少.都要设置. 所有就有一个 ...

  7. MFC控件编程之 按钮编辑框.静态文本的使用,以及访问控件的七种方法.

    MFC控件编程之 按钮编辑框.静态文本的使用以及访问控件的七种方法. 一丶按钮.静态文本的通用属性. 他们都有一个属性.就是可以输入标题内容.以及可以自定义控件ID. 创建一个MFC Dlg对话框. ...

  8. MFC控件GDI编程

    MFC控件GDI编程 一丶学习内容 1.了解常用的GDI函数绘图. 2.使用常用的画笔画刷. 二丶常用的GDI函数绘图 上方则为我们常用的GDI函数了. 画线 矩形. 以及圆 等等. 2.1 画线代码 ...

  9. Python pyQt4/pyQt5 学习笔记1(空白窗口,按钮,控件事件,控件提示,窗体显示到屏幕中间,messagebox)

    PyQt4是用来编写有图形界面程序(GUI applications)的一个工具包.PyQt4作为一个Python模块来使用,它有440个类和超过6000种函数和方法.同时它也是一个可以在几乎所有主流 ...

随机推荐

  1. 过滤器Filter的四种拦截方式

    过滤器有四种拦截方式!分别是:REQUEST.FORWARD.INCLUDE.ERROR. REQUEST: 直接访问目标资源时执行过滤器.包括:在地址栏中直接访问.表单提交.超链接.重定向,只要在地 ...

  2. 《Linux 性能及调优指南》3.2 CPU瓶颈

    翻译:飞哥 ( http://hi.baidu.com/imlidapeng ) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance ...

  3. Android仿淘宝头条滚动广告条

    之前我使用TextView+Handler+动画,实现了一个简单的仿淘宝广告条的滚动,https://download.csdn.net/download/qq_35605213/9660825: 无 ...

  4. hive计算周一的日期

    ) FreeMarker --',-7)?date('yyyy-MM-dd'),'week')?string('yyyy-MM-dd')}'

  5. 微信小程序 setData 的坑(转)

    最近在使用微信小程序的setData时,遇到了以下问题.如下: 官网文档在使用setData()设置数组对象的某个元素的属性时,是这么使用的: Page({ data: { array: [{text ...

  6. express总结(一)

    Express 框架核心特性: 可以设置中间件来响应 HTTP 请求. 定义了路由表用于执行不同的 HTTP 请求动作. 可以通过向模板传递参数来动态渲染 HTML 页面. express保留了Nod ...

  7. PHP解决网站大流量与高并发

    1:硬件方面 普通的一个p4的服务器每天最多能支持大约10万左右的IP,如果访问量超过10W那么需要专用的服务器才能解决,如果硬件不给力 软件怎么优化都是于事无补的.主要影响服务器的速度 有:网络-硬 ...

  8. 【开发工具】 JEECG_3.7新版开发工具

    链接:http://pan.baidu.com/s/1gfthmAf    密码:2yfv

  9. Centos6与Centos7防火墙设置与端口开放的方法

    Centos升级到7之后,内置的防火墙已经从iptables变成了firewalld.所以,端口的开启还是要从两种情况来说明的,即iptables和firewalld.更多关于CentOs防火墙的最新 ...

  10. Django--views(视图层)

    路径匹配后-----传给视图函数 一.视图函数 视图层,熟练掌握两个对象即可:请求对象(request)和响应对象(HttpResponse) 一个视图函数,简称视图,是一个简单的Python 函数, ...