程序效果
【环境】编程语言C++,VS2019
【操作】点击显示按钮,右侧即可显示用户选择结果
整体架构流程
1.创建MFC项目
2.绘制对话框
视图→工具箱→依次添加各个小按钮,并排列整齐
- 每个控件的ID都需要修改成自己可辨别的“名字”
- 对话框的ID也可在在属性中修改
我的对话框ID:IDD_MFCTest_DIALOG
3.添加MFC类
【操作】右键对话框→添加类
- 类名自定义
- 注意对话框的ID是否对应
4.添加控制变量
【操作】右键每个控件→添加变量
【作用】为每个控件关联一个变量,作为“桥梁”传递用户选择的数据
Combo Box
【注意】只有Edit Control的控件类别为:值 变量类型:CString
其他的类别均为:控件
5.控件初始化
Combo Box:
【注意】英文输入法、分号隔开,否则下拉框会出现在同一行
Edit Control:
CTestDlg::CTestDlg(CWnd* pParent /*=nullptr*/)
: CDialog(IDD_MFCTest_DIALOG, pParent)
, m_NAME(_T("请输入姓名"))
, m_Result(_T("请点击显示按钮"))
{
}
在CTestDlg.cpp中找到关联对话框部分的代码
并在下方添加代码进行初始化,提示用户进行操作
【效果】
技术名词解释
List control 和 Edit control有什么区别?
List control和Edit control是Windows编程中常用的两种控件
List control | Edit control |
显示和编辑列表数据,可显示多行数据 | 接收和显示单行文本输入 |
共同点:添加、删除、编辑 |
代码
CTestDlg.h
#pragma once
// CTestDlg 对话框
class CTestDlg : public CDialog
{
DECLARE_DYNAMIC(CTestDlg)
public:
CTestDlg(CWnd* pParent = nullptr); // 标准构造函数
virtual ~CTestDlg();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_MFCTest_DIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnEnChangeEditName();
afx_msg void OnCbnSelchangeComboSchool();
// 我的学校
CComboBox m_SchoolCtrl;
CString m_NAME;
CButton m_SexMale;
CButton m_SexFemale;
CString m_Result;
afx_msg void OnEnChangeEditShow();
afx_msg void OnBnClickedButtonResult();
afx_msg void OnBnClickedCheckZtll();
CButton m_ZT;//中特
CButton m_SZFX;//数值分析
CButton m_YYTJ;//应用统计
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedCheckSzfx();
afx_msg void OnBnClickedCheckYytj();
afx_msg void OnBnClickedRadioMale();
afx_msg void OnBnClickedRadioFemale();
};
CTestDlg.cpp
void CTestDlg::OnBnClickedButtonResult()
{
UpdateData(TRUE);
CString School;
CString Course;
m_SchoolCtrl.GetLBText(m_SchoolCtrl.GetCurSel(), School);
m_Result = School + "\r\n" + m_NAME;
if (m_SexMale.GetCheck())
m_Result += "\r\n男\r\n";
if (m_SexFemale.GetCheck())
m_Result += "\r\n女\r\n";
if (m_YYTJ.GetCheck()==1)
{
m_YYTJ.GetWindowTextW(Course);
m_Result =m_Result+ "您选择的课程是:" + "\r\n"+Course;
}
if (m_SZFX.GetCheck() == 1)
{
m_SZFX.GetWindowTextW(Course);
m_Result = m_Result + "\n" + "您选择的课程是:" + Course;
}
if (m_ZT.GetCheck()==1)
{
m_ZT.GetWindowTextW(Course);
m_Result += Course;
}
UpdateData(FALSE);
}
小结
关于UpdateData
UpdateData(TRUE):用于将用户输入的数据传入到程序中 (对应本例中:选择学校)
比如:计算前输入要计算的数据
UpdateData(FALSE):用于将程序中的数据显示出来(对应本例中:将所有选好的数据显示出来)
比如:计算后的结果显示