一、需求

当窗口大小变化时,如最大化、最小化时,控件位置和大小并没有变化,本文实现此功能。

二、界面

主界面为对话框,有最小化、最大化、关闭等功能。

三、原理

当窗口变化时,响应 OnSize 函数,并计算各控件位置,按比例缩放。

四、编码

4.1 变量定义

在对话框类向导中添加 WM_SIZE 消息。其函数定义如下:

afx_msg void OnSize(UINT nType, int cx, int cy);

在对话框头文件声明变量:

CRect m_cRect;

用于保存位置信息。

4.2 初始化

在OnInitDialog函数中先获取位置信息并保存:

GetClientRect(&m_cRect);

4.3 实现缩放

同一文件,实现控件变化的计算,代码如下:

void CTestDlg::ChangeSize(int ctrID, int cx, int cy)
{CWnd* pWnd = GetDlgItem(ctrID);if (pWnd){CRect rect;   //获取控件变化前的大小  pWnd->GetWindowRect(&rect);ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标// cx/m_cRect.Width()为对话框在横向的变化比例rect.left = rect.left*cx / m_cRect.Width();//调整控件大小rect.right = rect.right*cx / m_cRect.Width();rect.top = rect.top*cy / m_cRect.Height();rect.bottom = rect.bottom*cy / m_cRect.Height();pWnd->MoveWindow(rect);//设置控件大小}
}

先获取控件ID,得到控件大小,再根据当前的 x、y计算比例,再移动控件。

4.4 处理 OnSize 事件

在 OnSize 函数中调用 ChangeSize 函数:

void CTestDlg::OnSize(UINT nType, int cx, int cy)
{CDialogEx::OnSize(nType, cx, cy);int CDlgItem[] = {IDC_STC_1,IDC_STC_2,IDC_STC_3,};for (int i = 0; i < sizeof(CDlgItem) / sizeof(CDlgItem[0]); i++){ChangeSize(CDlgItem[i], cx, cy);}GetClientRect(&m_cRect);// 将变化后的对话框大小设为旧大小
}

根据指定的控件ID进行缩放。注意,有些控件可以不进行缩放,比如,左上方的提示语相关控件,不需要移动。

MFC小笔记:控件随窗口变化相关推荐

  1. mfc e将控件置于窗口顶层_PyQt5学习笔记04 - QWidget窗口控件基类

    本来这一篇是想写一下怎么使用Qt Designer去设计一个界面的,但是我现在通常都是用代码去直接写界面很少用设计器.因为Qt Designer并不是为了python而写的,所以用起来不是很方便.很多 ...

  2. MFC小笔记:TabCtrl父子窗口传递消息

    一.需求 MFC界面有一个设置对话框,实际使用TabCtrl+子对话框的形式.在子对话框中设置参数时,需要将结果反馈至父窗口下方.这样统一信息输出.本文解决问题:如何在子窗口中,获取父窗口句柄,并在父 ...

  3. python tkinter控件_如何实现python tkinter控件随窗口变化?

    不管是对于Java还是对于Python,我们最开始学习的时候,都会碰到关于开发上的窗口设置,如果不设置这个内容,你所呈现的项目效果,是非常不美观的,而往往为了符合美化,大家都会花费很多心思在基础的窗口 ...

  4. python控件随窗口变化而适配_如何实现python tkinter控件随窗口变化?

    不管是对于Java还是对于Python,我们最开始学习的时候,都会碰到关于开发上的窗口设置,如果不设置这个内容,你所呈现的项目效果,是非常不美观的,而往往为了符合美化,大家都会花费很多心思在基础的窗口 ...

  5. python tkinter界面 控件位置随窗体自动调整适应_如何实现python tkinter控件随窗口变化?...

    不管是对于Java还是对于Python,我们最开始学习的时候,都会碰到关于开发上的窗口设置,如果不设置这个内容,你所呈现的项目效果,是非常不美观的,而往往为了符合美化,大家都会花费很多心思在基础的窗口 ...

  6. mfc e将控件置于窗口顶层_【创e分享】Word毕业论文排版全攻略

    又到了为毕业论文奋战的时刻,每年一到这个时候,毕业论文这个磨人的小妖精就会出来兴风作浪,对广大即将毕业的大学生进行身体和心灵的摧残~~ 论文是一种很正式的文体,其中一个重要的体现就是排版,论文的排版要 ...

  7. python控件随窗口变化而适配_Tkinter窗口/控件比例调整

    我目前正在为一个编程类开发一个pythongui版本的Reversi.我已经对游戏逻辑进行了编程,目前我正在尝试使用Tkinter实现GUI.我有一些问题,调整游戏板(根窗口)和它的一切(画布和形状) ...

  8. python控件随窗口变化而适配_python pyqt5 设置控件随窗体拉伸

    2# -- coding: utf-8 -- ''' [简介] 布局中用到的addStretch函数例子 ''' from PyQt5.QtWidgets import QApplication ,Q ...

  9. 我的HEVC码流分析工具MFC小笔记:树形控件使用及窗口缩放

    大约1个半月前,发布了自己写的HEVC码流分析工具.当时的版本显示语法元素使用是的Edit控件.很多主流分析工具都使用树形控件,看上去觉得比较高端,于是在纠结一天后下定决心自己也实现树形的HEVC语法 ...

最新文章

  1. Silverlight实例教程 - Out of Browser在线更新和Silent安装
  2. python3基础语法-Python3的一些基础语法介绍和理解
  3. 大话设计模式(十一 三层架构,分层开发)
  4. 目标检测评价标准 精准度(precision)、召回率(recall)、准确率(accuracy)、交除并(IoU)【全】
  5. SharePoint 2010 Form 认证 之 IIS 添加数据
  6. 201403-1_相反数的个数
  7. mac java 读取到服务器上的文件夹_如何在Mac和Win之间高效共享文件?mac和win文件高效共享教程
  8. matepad和鸿蒙,上手华为新 MatePad Pro :搭载鸿蒙系统后,生产力有何不同?
  9. 6间企业获颁“首届粤港澳大湾区百强企业传承大奖”
  10. 以后给孩子起名字不用发愁了,先存着
  11. dll的基址与对应的lib文件
  12. 电商直播发展正夯,搭建电商网站需要怎样的云服务器配置?
  13. Week1.3-金融会计指标案例分析
  14. 什么是web移动端-移动端布局特点
  15. 高中英语试验修订本(第一册)上(人教版)
  16. 手写数字图片数据之python读取保存、二值化、灰度化图片+opencv处理图片的方法
  17. 单向和双向沟通带来启发
  18. Android按钮扩大动效,Android按钮动效UI设计教程
  19. C++11 中chrono库 实现高精度定时
  20. 完美国际2019最新服务器,《完美国际2》2019年6月5日部分数据互通公告

热门文章

  1. mysql gui tools ojdbc14.jar_[java]OJDBC版本区别 [ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别]
  2. 程序员生涯之我见 找到自己的兴趣所在 (zz)
  3. 3月3日发布!realme V25正式官宣:超大内存的国潮手机
  4. 有赞“小程序订阅消息”功能上线 支持商家主动推送「活动通知」
  5. LG已停止手机生产 手机生产线向家电制造转变
  6. 比尔 · 盖茨即将在美国商会发表演讲 系离婚后首次亮相
  7. 收回扣、打麻将、开赌场?比亚迪自曝多名员工贪污腐败
  8. 特斯拉接连出闹剧?一次比一次渗人...
  9. 8年前估值14.24亿的长城宽带近日被鹏博士“低价”打包出售
  10. “超大杯”版小米10不仅有120W超级快充,电池也要比传闻大