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) 成员变量的访问级别 通常选 publicprotected
变量类型 (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,右键选择打开方式,选择"资源编辑器"就可以打开了

相关推荐
C++ 老炮儿的技术栈18 小时前
从 Qt Designer 属性编辑器的层级可以看到继承链
c语言·数据库·c++·qt·sqlite·visual studio
天天进步201518 小时前
UI-TARS 源码解析 #22:二次开发实战:用 UI-TARS 做一个简单的 Windows 自动操作 Agent
windows·ui
啊哈一半醒18 小时前
Windows 虚拟机搭建 CentOS 全过程(2026 最新版 + 踩坑解决)
linux·windows·centos
new_zhou18 小时前
C++ 项目 AI 协作指南(Windows / MSVC 环境)
c++·人工智能·windows
水饺编程20 小时前
AT&T 汇编语言学习笔记开篇语
c语言·汇编·c++
Iruoyaoxh20 小时前
类和对象~
开发语言·c++
程序喵大人20 小时前
【C++进阶】STL算法与函数对象 - 04 find、count和any_of把查询写成意图
开发语言·c++·算法
豆沙沙包?20 小时前
c++中引用(P7-P11)
java·c++·算法
wuminyu20 小时前
虚拟线程底层ForkJoinPool的工作窃取算法机制
java·linux·c语言·jvm·c++
吹什么轩20 小时前
c++复习:c++11:lambda表达式
开发语言·c++