MFC第二十天 数值型关联变量 和单选按钮与复选框的开发应用

news2024/10/3 8:23:10

文章目录

  • 数值型关联变量
    • 数值型关联变量的种类介绍
  • 单选按钮与复选框
    • 单选按钮的组内选择原理解析
    • 单选按钮和复选框以及应用数值型关联变量的开发
      • CMainDlg.cpp
      • CInputDlg.h
      • CInputDlg.cpp
  • 附录

数值型关联变量

数值型关联变量的种类介绍

1、 数值型关联变量:

a)控件型关联变量:针对于所有MFC工具箱中的控件都有效。
DDX_Control(pDX, IDC_LIST, m_list);
b)数值型关联变量:
有部分的控件支持数值型关联变量,大部分不支持。
c)ListCtrl添加关联变量时,控件型的下拉是灰色的。
d)只有可录入的控件才支持数值型关联变量。
编辑框、下拉、日期,单选钮和多选框,另外ListBox可以关联。

2、数值型关联变量的用法:

a)CWnd::UpdateData :更新数据,可以认为集体输入输出函数。
b)代入TRUE代表从界面输入到内存(类似于cin >>)
c)代入FALSE代表从内存输出到界面(类似于cout <<)

在这里插入图片描述

单选按钮与复选框

单选按钮的组内选择原理解析

单选按钮:
a)必须分组:设立一个组长;
b)WS_GROUP这个属性,几乎所有控件都没用除了单选按钮
c)必须把一组单选按钮的第一个设立为组长
d)在类向导中建立关联变量时,会发现只有组长有权力建立数值型关联变量。

单选按钮和复选框以及应用数值型关联变量的开发

在这里插入图片描述
在这里插入图片描述

CMainDlg.cpp

初始化时对列表进行插入

BOOL CMainDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标
	m_lsit.InsertColumn(0, _T("工号"), LVCFMT_LEFT, 110);
	m_lsit.InsertColumn(1, _T("姓名"), LVCFMT_LEFT, 110);
	m_lsit.InsertColumn(2, _T("工资"), LVCFMT_LEFT, 110);
	m_lsit.InsertColumn(3, _T("入职日期"), LVCFMT_LEFT, 120);
	m_lsit.InsertColumn(4, _T("性别"), LVCFMT_LEFT, 100);
	m_lsit.InsertColumn(5, _T("学历"), LVCFMT_LEFT, 100);
	m_lsit.InsertColumn(6, _T("语言"), LVCFMT_LEFT, 160);
	m_lsit.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

在这里插入图片描述

CInputDlg.h

class CInputDlg : public CDialogEx
{
	int m_sNumb;
	CDateTimeCtrl m_Date;
	CString m_sName;
	double m_fSalary;
	COleDateTime m_sDate;
	BOOL m_bSex;
	int m_edu;
	BOOL m_Eng;
	BOOL m_Jpn;
	BOOL m_Rus;
	BOOL m_Kern;
	CButton m_bEng;
	DECLARE_DYNAMIC(CInputDlg)
	void InputData();
	CString GetLange();
	CListCtrl& m_lsit;
	LPCTSTR m_es[6]{ _T("初中"),_T("高中"), _T("大专"), _T("本科"), _T("硕士"), _T("博士") };
public:
	CInputDlg(CListCtrl& list);   // 标准构造函数
	virtual ~CInputDlg();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_INPUT_DLG };
#endif

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnBnClickedOk();
	afx_msg void OnBnClickedTest();
};

CInputDlg.cpp

CInputDlg::CInputDlg(CListCtrl& list)
	: CDialogEx(IDD_INPUT_DLG, nullptr), m_lsit(list)
	, m_sNumb(1000)
	, m_sName(_T(""))
	, m_fSalary(0)
	, m_sDate(COleDateTime::GetCurrentTime())
	, m_bSex(FALSE)
	, m_edu(3)
	, m_Eng(FALSE)
	, m_Jpn(FALSE)
	, m_Rus(FALSE)
	, m_Kern(FALSE)
{
}
CInputDlg::~CInputDlg()
{
}
void CInputDlg::DoDataExchange(CDataExchange* pDX){
	CDialogEx::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_NUMB, m_sNumb);  // 函数 界面 内存  交换
	DDX_Control(pDX, IDC_DATETIME, m_Date);
	DDX_Text(pDX, IDC_NAME, m_sName);
	DDX_Text(pDX, IDC_SALARY, m_fSalary);
	DDX_DateTimeCtrl(pDX, IDC_DATETIME, m_sDate);
	DDX_Radio(pDX, IDC_RADIO1, m_bSex);
	DDX_Radio(pDX, IDC_RADIO3, m_edu);
	DDX_Check(pDX, IDC_CHK_ENG, m_Eng);
	DDX_Check(pDX, IDC_CHK_JPN, m_Jpn);
	DDX_Check(pDX, IDC_CHK_RUS, m_Rus);
	DDX_Check(pDX, IDC_CHK_KERN, m_Kern);
	DDX_Control(pDX, IDC_CHK_ENG, m_bEng);
}
BEGIN_MESSAGE_MAP(CInputDlg, CDialogEx)
	ON_BN_CLICKED(IDOK, &CInputDlg::OnBnClickedOk)
	ON_BN_CLICKED(IDC_TEST, &CInputDlg::OnBnClickedTest)
END_MESSAGE_MAP()

//auto p = GetOwner();	背景窗口 不属于父子关系 附着在上面
//CString str;
//p->GetWindowText(str);   
void CInputDlg::InputData()
{
	UpdateData();
	int i = m_lsit.GetItemCount();
	CString str;
//	GetDlgItemText(IDC_NUMB, str); //使用关联数值变量后可不用getdlgitem
	str.Format(_T("%d"), m_sNumb);
	m_lsit.InsertItem(i, str);
	m_lsit.SetItemText(i, 1, m_sName);
	str.Format(_T("%0.2f"), m_fSalary);
	m_lsit.SetItemText(i, 2, str); 
	str.Format(_T("%d年%d月%d日"), m_sDate.GetYear(), m_sDate.GetMonth(), m_sDate.GetDay());
	m_lsit.SetItemText(i, 3, str);
	m_lsit.SetItemText(i, 4, m_bSex?_T("女"):_T("男"));
	m_lsit.SetItemText(i, 5,m_es[m_edu]);
	m_lsit.SetItemText(i, 6, GetLange());
	SetFocus();
}

//int n =GetDlgItemInt(IDC__CHK_ENG); 原理仍然是atoi( GetDlgItemText表面的文字)
CString CInputDlg::GetLange()
{
	CString str;
	if (m_bEng.GetCheck() == BST_CHECKED)
	//if (m_Eng)
		str += _T("英语 ");
	if (m_Jpn)
		str += _T("日语 ");
	if (m_Kern)
		str += _T("韩语 ");
	if (m_Rus)
		str += _T("俄语 ");
	return str;
}
 
void CInputDlg::OnBnClickedOk()
{
	
	CWnd* p = GetFocus();
	int nID = p->GetDlgCtrlID();
	if (nID == IDOK|| nID ==IDC_DATETIME)
		InputData();
	else
		NextDlgCtrl();
	CDialogEx::OnOK();
}
void CInputDlg::OnBnClickedTest()
{
	if (++m_edu > 5)  //判断是否在范围
		m_edu = 0;

	auto p = (CButton*)GetDlgItem(IDC_EDUC); //获取指针
	int n = 0; 
	do
	{
		p->SetCheck((m_edu == n)); //设置选择和没有选择的按钮
		p = (CButton*)p->GetWindow(GW_HWNDNEXT); //向下查找
		++n;
	} while (p && !(GetStyle()&WS_GROUP));   //判断遇到下一个组长结束 而且p不等于空
}

在这里插入图片描述

附录

所有关联变量的类型(全)

 simple text operations 编辑框可以管理以下这些变量种类
void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, BYTE& value);
void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, short& value);
void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, int& value);
void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, UINT& value);
void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, long& value);
void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, DWORD& value);
void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, LONGLONG& value);
void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, ULONGLONG& value);
void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, CString& value);
void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, LPTSTR value, int nMaxLen);
void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, float& value);
void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, double& value);

special control types

void AFXAPI DDX_Check(CDataExchange* pDX, int nIDC, int& value); 复选
void AFXAPI DDX_Radio(CDataExchange* pDX, int nIDC, int& value); 单选
void AFXAPI DDX_LBString(CDataExchange* pDX, int nIDC, CString& value); ListBox
void AFXAPI DDX_LBIndex(CDataExchange* pDX, int nIDC, int& index); ListBox
//void AFXAPI DDX_LBStringExact(CDataExchange* pDX, int nIDC, CString& value);
void AFXAPI DDX_CBStringExact(CDataExchange* pDX, int nIDC, CString& value);
void AFXAPI DDX_CBString(CDataExchange* pDX, int nIDC, CString& value); //ComboBox
void AFXAPI DDX_CBIndex(CDataExchange* pDX, int nIDC, int& index);//ComboBox
void AFXAPI DDX_Scroll(CDataExchange* pDX, int nIDC, int& value);
void AFXAPI DDX_Slider(CDataExchange* pDX, int nIDC, int& value);
void AFXAPI DDX_IPAddress(CDataExchange* pDX, int nIDC, DWORD& value);
void AFXAPI DDX_DateTimeCtrl(CDataExchange* pDX, int nIDC, CString& value);
void AFXAPI DDX_DateTimeCtrl(CDataExchange* pDX, int nIDC, CTime& value);
void AFXAPI DDX_DateTimeCtrl(CDataExchange* pDX, int nIDC, COleDateTime& value);
void AFXAPI DDX_Control(CDataExchange* pDX, int nIDC, CWnd& rControl);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/787718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32MP157驱动开发——按键驱动(异步通知)

文章目录 “异步通知 ”机制&#xff1a;信号的宏定义&#xff1a;信号注册 APP执行过程驱动编程做的事应用编程做的事异步通知方式的按键驱动程序(stm32mp157)button_test.cgpio_key_drv.cMakefile修改设备树文件编译测试 “异步通知 ”机制&#xff1a; 信号的宏定义&#x…

请问学JavaScript 前要学html 和css 吗?

前言 html和css可以理解为是一个网站的骨架和皮肤&#xff0c;这两部分做好后整个网站的外观展示的完成度基本就有了个90%左右&#xff0c;所以在学习js前是需要学习html和css 的&#xff0c;这两部分不用花特别多的时间&#xff08;虽然css如果想做一些非常炫酷的效果个人认为…

记一次容器环境下出现 Address not available

作者&#xff1a;郑明泉、余凯 困惑的源地址 pod 创建后一段时间一直是正常运行&#xff0c;突然有一天发现没有新的连接创建了&#xff0c;业务上是通过 pod A 访问 svc B 的 svc name 的方式&#xff0c;进入 pod 手动去 wget 一下&#xff0c;发现报错了 Address not avai…

Roslyn 动态编译

NET 编译器平台&#xff08;.NET Compiler Platform&#xff09; 也称为Roslyn&#xff0c;是Microsoft的一组用于C#和Visual Basic (VB.NET) 语言的开源 编译器和代码分析 API。 该项目特别包括C# 和 VB.NET 编译器的自托管版本——用语言本身编写的编译器。编译器可通过传统…

vue2路由(个人学习笔记四)

目录 友情提醒第一章、路由简介1.1&#xff09;什么是路由1.2&#xff09;安装路由插件 第二章、自定义路由器2.1&#xff09;创建路由器文件index.js文件2.2&#xff09;index.js文件中配置路由信息 第三章、使用路由器3.1&#xff09;在main.js文件中将路由器绑定到Vue对象3.…

查看maven发布时间的方法

查看maven发布时间的方法如下【 打开maven官网 选中Release Notes 即可查看对应版本的发布时间 】

【Linux命令200例】cmp文件比较工具

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

微信小程序开发知识点总结(不断补充)

一、怎样实现小程序与数据库的交互原理 微信小程序开发里面是不能直接写数据库连接文件&#xff0c;如果要实现与数据库的交互&#xff0c;就需要用到中间的接口。&#xff08;这个接口可以理解成springboot项目中controller层的RequestMapping的URL&#xff09;具体用法如下&…

Thunderbird 115 带来了Supernova UI 和先进功能

导读Thunderbird 115 带来了Supernova UI 和先进功能&#xff0c;将电子邮件带入了新的高度。 流行的开源电子邮件客户端 Mozilla Thunderbird 推出了最新版本Thunderbird 115&#xff0c;它带来了一系列令人兴奋的功能和改进。更新带来了令人耳目一新的超新星用户界面(UI)&…

STM32MP157驱动开发——按键驱动(线程化处理)

文章目录 “线程化处理”机制&#xff1a;内核函数线程化处理方式的按键驱动程序(stm32mp157)编程思路button_test.cgpio_key_drv.cMakefile修改设备树文件编译测试 “线程化处理”机制&#xff1a; 工作队列是在内核的线程的上下文中执行的 工作队列中有多个 work&#xff0…

matlab安装激活后报错找不到icuuc54.dll

matlab激活后&#xff0c;有报错找不到icuuc54.dll 解决办法&#xff1a; 这是因为破解用的版本不一样&#xff0c;我下载的是matlab2016b&#xff0c;但是破解时&#xff0c;在网上下载的matlab2016a的破解包&#xff0c;所以我重新下载2016b的crack包后&#xff0c;然后再在…

使用Vs Studio和Cmake生成C++库

使用Vs Studio和Cmake生成C库 在windows系统下&#xff0c;由于没有C的编译器&#xff0c;想通过源码安装、加载C的库存在不方便的地方。本文将介绍通过使用Vs Studio运用Cmake的方式&#xff0c;编译一个简单的自定义库&#xff0c;并进行加载、调用。 工程源代码 前提条件 …

Python增删改查小练习

目录 1. List操作-增加 2. List操作-查询 3. List操作-修改 4. List操作-删除 资料获取方法 1. List操作-增加 List Append(“xx”) 插入到列表尾部 Insert(x,xx) 在指定的位置插入 Extend 将列表的元素分开,插入到之前列表的尾部 小练习: 把一个字符串”abcdefg…

小白必看系列之c语言中常见操作符示例和用法总结

文章目录 前言算术操作符&#xff08;Arithmetic Operators&#xff09;代码示例代码解析 关系操作符&#xff08;Relational Operators&#xff09;代码示例代码解析 逻辑操作符&#xff08;Logical Operators&#xff09;代码示例代码解析 位操作符&#xff08;Bitwise Opera…

矩阵svd分解和矩阵的伪逆

真该好好学习一下Latex数学公式的语法和规则了&#xff0c;否则&#xff0c;连写个博客都没法写&#xff0c;这叫什么事&#xff01; https://blog.csdn.net/ViatorSun/article/details/82826664 直接上数学博士写的ppt图&#xff08;肯定比我在这里胡说八道强的多&#xff0…

【设计模式——学习笔记】23种设计模式——原型模式Prototype(原理讲解+应用场景介绍+案例介绍+Java代码实现)

原型模式 介绍 原型模式指用通过拷贝原型实例创建新的实例&#xff0c;新实例和原型实例的属性完全一致原型模式是一种创建型设计模式工作原理是通过调用原型实例的 clone()方法来完成克隆&#xff0c;原型实例需要实现Cloneable接口&#xff0c;并重写clone()方法需要为每个…

平台化的测试工具推荐|一站式测试平台RunnerGo

互联网行业的发展到今天越来越多的公司更加注重工作效率和团队协作&#xff0c;越来越多的产品也趋于平台化&#xff0c;平台化也更有利于提高团队效率&#xff0c;代码管理、持续构建、持续部署这些工具的发展都是非常超前的&#xff0c;它们对于团队协作的支持和工作效率的提…

河南移动联合中兴打造SPNPTN网络融合示范样板

最近河南移动和中兴在濮阳进行SPN和PTN两网融合规模部署&#xff0c;可以充分展示出PTN网络价值&#xff0c;并优化网络结构、降低网络运营成本&#xff0c;实现SPN和PTN网络的融合融通&#xff0c;在增强SPN网络综合业务承载能力之余也能提升了网络性能。 河南移动现在是SDH、…

CF1837 A-D

A题 题目链接&#xff1a;https://codeforces.com/problemset/problem/1837/A 基本思路&#xff1a; 要求计算蚂蚱到达位置 x最少需要多少次跳跃&#xff0c;并输出蚂蚱的跳跃方案。因为每次可以向左或向右跳跃一定距离&#xff08;距离必须为整数&#xff09;&#xff0c;但是…

微服务探索之路06篇k8s配置文件Yaml部署Redis使用Helm部署MongoDB和kafka

1 安装Redis 1.1创建配置文件redis.conf 切换到自己的目录下如本文是放在/home/ubuntu下 cd /home/ubuntuvim redis.conf bind 0.0.0.0 protected-mode yes port 6379 requirepass qwe123456 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no pidfile /var/run/r…