Windows MFC添加类,变量,类导向

Visual Studio 的"类向导(Class Wizard)"------用于在 MFC(Microsoft Foundation Classes)项目中管理控件、变量、类之间的绑定关系的工具。我来帮你理清这三者的区别与联系。


🧩 一、三种操作的区别

功能 用途 结果
添加类(Add Class) 为对话框、对话框页、控件模板或自定义逻辑创建一个新的C++类 生成一个新的 .h 与 .cpp 文件,并自动注册到项目中
添加变量(Add Variable) 将资源(如控件)与代码成员变量绑定起来 在类头文件中生成一个成员变量(如 CButton m_btnTest;)并自动完成 DDX/DDV 绑定
类向导(Class Wizard) 管理上述绑定关系、事件消息映射、函数生成等 集中控制变量、消息映射、类创建等一体化操作

🎛 二、在"添加变量"窗口中各项解释(你图里的那一页)

以你截图中的为例:

项目 含义 举例
控件ID (IDC_BTN_TEST) 在资源编辑器中为控件分配的唯一标识符 IDC_BTN_TEST
控件类型 (BUTTON) 控件的类型(如按钮、编辑框、列表框) BUTTON
类别 (控件 / 值) 决定变量的用途:①"控件"类变量用来直接操作控件对象;②"值"类变量用于绑定数据值(比如 Edit 控件和CString 文本的对应) ①CButton m_btnTest;②CString m_strName;
访问 (public/protected/private) 成员变量的访问级别 通常选 public 或 protected
变量类型 (CButton) Visual Studio 自动推断出的控件类类型 CButton
名称 (m_btnTest) 变量名(你自己定义) m_btnTest
注释 (可选) 对变量的说明备注 "测试按钮" 等

🧠 三、类别区别:"控件变量" vs "值变量"

类别 用法 示例
控件变量(Control) 用于直接控制控件对象(调用成员函数等) m_btnTest.SetWindowText(_T("OK"));
值变量(Value) 仅用于数据交换(Data Exchange),不直接操作控件 UpdateData(TRUE); // 把Edit框内容读入 m_strName``UpdateData(FALSE); // 把m_strName值显示到Edit框

👉 所以:"类别"是控制你要绑定的内容是控件对象本身 还是它的数据值。


⚙️ 四、"类向导(Class Wizard)"的作用

在 MFC 里,类向导是一个集中式的工具:

  1. 添加控件变量(就是你现在在做的)

  2. 添加消息处理函数 (如按钮点击事件 OnBnClickedBtnTest())

  3. 管理DDX/DDV绑定

  4. 为资源(如对话框、菜单)创建新的类


✅ 五、建议使用顺序(典型流程)

  1. 在 资源视图 中设计对话框。

  2. 使用 类向导 → 添加类(Add Class) 为该对话框创建类,例如 CTestDlg。

  3. 在 类向导 → 添加变量(Add Variable) 里为控件添加控件变量或值变量。

  4. 在 类向导 → 消息映射 页添加响应函数(如按钮点击事件)。

告诉你们一个小妙招

解决这个办法,文件资源管理器中找.rc,右键选择打开方式,选择"资源编辑器"就可以打开了

相关推荐
01二进制代码漫游日记5 小时前
[C++]之内存管理(一)
jvm·c++·学习
椒颜皮皮虾྅5 小时前
模型部署不再卡在环境上:DeploySharp 四大推理引擎与 Windows/Linux 离线交付实战
linux·运维·开发语言·人工智能·windows·计算机视觉·cuda
codebolt5 小时前
C++程序crash分析和内存检测
开发语言·c++
昂好的day5 小时前
C# 同步异步与多线程:Thread / Task / 线程池一次讲透(上篇)
开发语言·windows·c#
ShineWinsu5 小时前
对于Qt:QLabel常见属性的解析
c++·qt·面试·笔试·gui·标签·qlabel
垆边人似月.5 小时前
Ubuntu 配置 Samba 共享文件夹并映射到 Windows 完整指南
linux·windows·ubuntu
zwc32104320556 小时前
Day 5:threshold与inRange阈值分割
c++·图像处理·人工智能·opencv·算法·计算机视觉
小徐不徐说6 小时前
数据库存储基础:理解表结构、主键、事务与 BLOB
开发语言·数据库·c++·qt·程序设计
草莓熊Lotso6 小时前
【C++ 基于微服务的即时通讯系统】网关基建:cpp-httplib 与 WebSocketpp 从入门到实战
linux·开发语言·数据库·c++·redis·微服务·云原生
Sakura_j_h_15 小时前
EasyEDA PCB 快速设计Skills
c++·python·github