当前位置: 首页 > news >正文

【MFC】C++所有控件随窗口大小全自动等比例缩放源码(控件内字体、列宽等未调整) 20250124

MFC界面全自动等比例缩放

1.在初始化里 枚举每个控件记录所有控件rect
2.在OnSize里,根据当前窗口和之前保存的窗口的宽高求比例x、y
3.枚举每个控件,根据比例x、y调整控件上下左右,并移动到新rect
在这里插入图片描述

在这里插入图片描述

struct ControlInfo {CWnd* pControl;CRect originalRect;
};std::vector<ControlInfo> m_controls;BOOL CProductionTestingDlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 记录父窗口及其子窗口的原始位置和大小CRect rect;GetWindowRect(&rect); // 父窗口m_controls.push_back({ this, rect }); // 获取所有子控件的信息CWnd* pWnd = GetWindow(GW_CHILD);while (pWnd){pWnd->GetWindowRect(rect);ScreenToClient(rect); //将屏幕坐标系中的点转换为客户端坐标系(即窗口的内容区域,去掉了边框和标题栏)中的点。m_controls.push_back({ pWnd, rect });pWnd = pWnd->GetNextWindow();}ShowWindow(SW_MAXIMIZE);return TRUE;
}void CProductionTestingDlg::OnSize(UINT nType, int cx, int cy)
{CDialog::OnSize(nType, cx, cy);// 如果没有控件,则不做任何操作if (m_controls.empty()) return;// 获取当前窗口大小,计算比例CRect nowDlgRect;GetWindowRect(&nowDlgRect);//根据当前窗口和之前保存的窗口的宽高求比例float xScale = (float)nowDlgRect.Width() / m_controls[0].originalRect.Width();float yScale = (float)nowDlgRect.Height() / m_controls[0].originalRect.Height();// 调整控件的大小和位置for (auto& controlInfo : m_controls) {// 跳过父窗口if (controlInfo.pControl == this) continue;// 根据比例计算新的矩形CRect newRect ;newRect.left = (int)(controlInfo.originalRect.left * xScale);newRect.top = (int)(controlInfo.originalRect.top * yScale);newRect.right = (int)(controlInfo.originalRect.right * xScale);newRect.bottom = (int)(controlInfo.originalRect.bottom * yScale);// 移动并调整控件controlInfo.pControl->MoveWindow(newRect); //使用的是 客户区坐标} 
}
http://www.lryc.cn/news/526313.html

相关文章:

  • C#标准Mes接口框架(持续更新)
  • 【Uniapp-Vue3】动态设置页面导航条的样式
  • SQL 递归 ---- WITH RECURSIVE 的用法
  • 期权帮|如何利用股指期货进行对冲套利?
  • INCOSE需求编写指南-第1部分:介绍
  • FFPlay命令全集合
  • Mono里运行C#脚本34—内部函数调用的过程
  • rust feature h和 workspace相关知识 (十一)
  • -bash: ./uninstall.command: /bin/sh^M: 坏的解释器: 没有那个文件或目录
  • 【Redis】Redis入门以及什么是分布式系统{Redis引入+分布式系统介绍}
  • C#高级:常用的扩展方法大全
  • Consul持久化配置报错1067---consul_start
  • 「 机器人 」扑翼飞行器控制策略浅谈
  • Qt信号与槽底层实现原理
  • QT QTableWidget控件 全面详解
  • Flutter_学习记录_基本组件的使用记录
  • 基于JAVA的微信点餐小程序设计与实现(LW+源码+讲解)
  • 计算机毕业设计hadoop+spark+hive民宿推荐系统 酒店推荐系统 民宿价格预测 酒店价格 预测 机器学习 深度学习 Python爬虫 HDFS集群
  • 亲测有效!解决PyCharm下PyEMD安装报错 ModuleNotFoundError: No module named ‘PyEMD‘
  • Gin 应用并注册 pprof
  • Jenkins 启动
  • 第20篇:Python 开发进阶:使用Django进行Web开发详解
  • 文献引用指南ChatGPT提示词分享
  • 程序代码篇---C++类.c\.h
  • @RabbitListener处理重试机制完成后的异常捕获
  • Mac 上管理本地 Go 版本
  • 低代码系统-产品架构案例介绍、得帆云(八)
  • 免费GPU算力,不花钱部署DeepSeek-R1
  • JavaEE:多线程进阶
  • 不只是mini-react第二节:实现最简fiber