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

MFC中的CMFCDynamicLayout类的介绍

MFC中的CMFCDynamicLayout类的介绍

MFC想要实现对话框中窗口拖拽时自动改变控件的位置和大小,在Visual Studio 2015之前只能自己写方法进行计算。
Visual Studio 2015以后,MFC增加了一个叫做CMFCDynamicLayout的类,来处理画面上这些需要自适应大小的控件。

下面我们来介绍CMFCDynamicLayout布局类的使用:

首先新建工程:,我在我之前的工程中使用该类。

1.首先需要包含头文件

#include<afxlayout.h>

在对话框中添加一些控件如下:

wechat_2025-09-21_233815_302

添加完后,需要设置对话框的属性是Resizing属性。

第二步:在对话框的OnInitialDialog函数中添加代码:

// 启用布局方式
EnableDynamicLayout(TRUE);CMFCDynamicLayout* layout = GetDynamicLayout();if (layout)
{layout->Create(this);layout->SetMinSize(CSize(400,300));layout->AddItem(IDC_BUTTON_OK, CMFCDynamicLayout::MoveHorizontalAndVertical(100,100),CMFCDynamicLayout::SizeNone()); layout->AddItem(IDC_BUTTON_CANCEL, CMFCDynamicLayout::MoveHorizontalAndVertical(100,100),CMFCDynamicLayout::SizeNone()); layout->AddItem(IDC_LIST_CITY, CMFCDynamicLayout::MoveNone(),CMFCDynamicLayout::SizeHorizontalAndVertical(100,100));layout->AddItem(IDC_STATIC_MODEL, CMFCDynamicLayout::MoveHorizontalAndVertical(100, 100),CMFCDynamicLayout::SizeNone()); layout->AddItem(IDC_RADIO_MODEL, CMFCDynamicLayout::MoveHorizontalAndVertical(100, 100),CMFCDynamicLayout::SizeNone());layout->AddItem(IDC_RADIO_MODEL2, CMFCDynamicLayout::MoveHorizontalAndVertical(100, 100),CMFCDynamicLayout::SizeNone());layout->AddItem(IDC_RADIO_MODEL3, CMFCDynamicLayout::MoveHorizontalAndVertical(100, 100),CMFCDynamicLayout::SizeNone());layout->AddItem(IDC_STATIC_LED1, CMFCDynamicLayout::MoveHorizontalAndVertical(100,100),CMFCDynamicLayout::SizeHorizontalAndVertical(100,100));layout->AddItem(IDC_STATIC_LED2, CMFCDynamicLayout::MoveHorizontalAndVertical(100,100),CMFCDynamicLayout::SizeHorizontalAndVertical(100, 100));	
}

代码运行结果:

devenv_mQTa7nIHpg

小结:

可以使用该类来实现界面控件跟随对话框大小改变而改变。

  1. 启用/关闭
    EnableDynamicLayout(TRUE/FALSE); // CWnd 成员
  2. 取布局对象
    CMFCDynamicLayout* p = GetDynamicLayout(); // 必须先启用再取
  3. 添加控件(二选一)
    BOOL AddItem(HWND hwnd, MoveSettings, SizeSettings);
    BOOL AddItem(int nID, MoveSettings, SizeSettings);
  4. 移动规则(静态函数)
    MoveNone() / MoveHorizontal(pct) / MoveVertical(pct) / MoveHorizontalAndVertical(x, y)
    pct=100 表示窗口变多少控件就移多少,0 表示不动。
  5. 大小规则
    SizeNone() / SizeHorizontal(pct) / SizeVertical(pct) / SizeHorizontalAndVertical(x, y)
  6. 其他
    Adjust() // 立即触发一次重排(通常框架在 OnSize 里自动调)
    SetMinSize(size) // 小于该尺寸不再缩放
    HasItem()/IsEmpty()

更多使用方法可以参考微软官方。

参考文章

1.CMFCDynamicLayout

2.使用CMFCDynamicLayoutLayout动态修改MFC画面上控件的大小和位置

http://www.dtcms.com/a/394125.html

相关文章:

  • UniScene 统一驾驶场景 | 生成语义占据 | 生成多视角视频 | 生成激光点云 CVPR2025
  • Git 简明教程:从原理到实战
  • 【设计模式】中介者模式
  • nginx添加modsecurity插件
  • 代码上传Github:SSH法
  • 【iOS】AFNetworking初步了解及使用
  • JVM实战-G1参数调优
  • 超简单的视频分割脚本
  • 基于51单片机电子钟闹钟12/24小时制LCD显示( proteus仿真+程序+设计报告+讲解视频)
  • 在 Windows 系统上安装官方 Codex CLI 教程
  • Redis 配置与优化全攻略
  • 二分查找左右边界写法
  • Oracle体系结构-Large Pool详解
  • Elasticsearch面试精讲 Day 19:磁盘IO与存储优化
  • 【AI智能体】Dify 搭建数据分析应用实战操作详解
  • Nginx localtion / 、/a、/a/ 的区别
  • 【C++】string的使用与模拟实现
  • 新手向 算法 希尔排序-yang
  • 如何用RAG增强的动态能力与大模型结合打造企业AI产品?
  • 黑马头条_SpringCloud项目阶段五:openFeign服务接入以及接入腾讯云内容安全服务实现文章提交违规信息自动审核
  • Spring、SpringBoot框架核心流程详解
  • 195. Java 异常 - finally 块:Java 中的“兜底侠”
  • C语言底层学习(2.指针与数组的关系与应用)(超详细)
  • 008 Rust注释
  • ubuntu防火墙开放端口
  • ​MySQL 8.0.29 RPM 安装教程(CentOS 7 / RHEL 7 详细步骤)​附安装包
  • AIPPT:AI一键生成高质量PPT
  • [已更新]2025华为杯E题数学建模研赛E题研究生数学建模思路代码文章成品:高速列车轴承智能故障诊断问题
  • 从零到一:Vue3 + Spring Boot + MySQL 全栈项目部署到阿里云服务器完整教程
  • 微服务基础2-网关路由