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

文章目录

  • 数值型关联变量
    • 数值型关联变量的种类介绍
  • 单选按钮与复选框
    • 单选按钮的组内选择原理解析
    • 单选按钮和复选框以及应用数值型关联变量的开发
      • 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);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全志F1C200S嵌入式驱动开发(解决spi加载过慢的问题)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 之前的几个章节当中,我们陆续解决了spi-nor驱动的问题、uboot支持spi-nor的问题。按道理来说,下面要做的应该就是用uboot的loady命令把kernel、dtb、rootfs这些文件下载到ddr,然…

执行 yum install gcc 报 【-bash: $‘yum\302\240install\302\240gcc‘: 未找到命令】

执行 yum install gcc 报错 找了一圈&#xff0c;执行&#xff1a;sudo apt-get install yum 执行&#xff1a;wget http://yum.baseurl.org/download/3.2/yum-3.2.28.tar.gz 在线下载yum完成 对其进行解压&#xff1a;tar zxvf yum-3.2.28.tar.gz 解压后如下&#xff1a; 执行…

Tiny Player (js) - 轻量好用、免费开源的 web 视频播放开发组件,内置硬解、软解视频功能

一款简单好用的 JS 视频播放器&#xff0c;完美解决我遇到的移动端播放视频的需求&#xff0c;安利给各位。 关于 Tiny Player Tiny Player 是一个极简的视频播放器 JS 库&#xff0c;内置硬解、软解视频功能&#xff0c;支持原生控件样式以及自定义控件样式&#xff0c;小巧…

Android Service启动ANR原理

一、前言 在Service组件StartService()方式启动流程分析文章中&#xff0c;针对Context#startService()启动Service流程分析了源码&#xff0c;其实关于Service启动还有一个比较重要的点是Service启动的ANR&#xff0c;因为因为线上出现了上百例的"executing service &quo…

vue三级路由的写法

{path: "/trafficmanagement",component: Layout,redirect: "/trafficmanagement",alwaysShow: true,meta: {title: "通行模块",icon: "excel",},children: [{path: "carline",name: "carline",alwaysShow: true,…

OpenCV图像处理-视频分割静态背景-MOG/MOG2/GMG

视频分割背景 1.概念介绍2. 函数介绍MOG算法MOG2算法GMG算法 原视频获取链接 1.概念介绍 视频背景扣除原理&#xff1a;视频是一组连续的帧&#xff08;一幅幅图组成&#xff09;&#xff0c;帧与帧之间关系密切(GOP/group of picture)&#xff0c;在GOP中&#xff0c;背景几乎…

LeetCode116. 填充每个节点的下一个右侧节点指针

116. 填充每个节点的下一个右侧节点指针 文章目录 [116. 填充每个节点的下一个右侧节点指针](https://leetcode.cn/problems/populating-next-right-pointers-in-each-node/)一、题目二、题解方法一&#xff1a;迭代方法二&#xff1a;递归 一、题目 给定一个 完美二叉树 &…

【nginx】nginx中root与alias的区别:

文章目录 root与alias主要区别在于nginx如何解释location后面的uri&#xff0c;这会使两者分别以不同的方式将请求映射到服务器文件上。 root的处理结果是&#xff1a;root路径&#xff0b;location路径 alias的处理结果是&#xff1a;使用alias路径替换location路径 alias是一…

Qt Core学习日记——第七天QMetaObject(上)

每一个声明Q_OBJECT的类都具有QMetaObject对象 Q_OBJECT宏源代码&#xff1a; #define Q_OBJECT \ public: \ QT_WARNING_PUSH \ Q_OBJECT_NO_OVERRIDE_WARNING \ static const QMetaObject staticMetaObject; \ virtual const QMetaObject *metaObject() const; \ vir…

istio安装部署总结

istio安装部署总结 大纲 istio基础概念版本选择安装istio核心主件卸载istiokiali安装 istio基础概念 https://istio.io/latest/zh/docs/ 中文文档 istio是一个服务治理平台&#xff0c;治理服务间的访问&#xff0c;&#xff08;例如流量控制&#xff0c;安全策略&#xf…

【C++链表】

目录 前言一、搭建链表实现的框架二、链表的构造函数三、链表的尾插四、链表的遍历(重点)迭代器的遍历const修饰的迭代器 五、代码实现 前言 最近用C写了一下list的基本功能&#xff0c;感触颇深。本以为会跟之前用C写list一样会很轻松&#xff0c;没想到更难了。要考虑的东西…

代码随想录| 图论04 查并集 ●查并集理论知识 ●1971.寻找图中是否存在路径 ●684.冗余连接 ●685.冗余连接II

#查并集理论知识 并查集用处&#xff1a;解决连通性问题 将两个元素添加到一个集合中。判断两个元素在不在同一个集合 思路&#xff1a;将三个元素A&#xff0c;B&#xff0c;C &#xff08;分别是数字&#xff09;放在同一个集合&#xff0c;其实就是将三个元素连通在一起&a…

k8s常见的资源对象使用

目录 一、kubernetes内置资源对象 1.1、kubernetes内置资源对象介绍 1.2、kubernetes资源对象操作命令 二、job与cronjob计划任务 2.1、job计划任务 2.2、cronjob计划任务 三、RC/RS副本控制器 3.1、RC副本控制器 3.2、RS副本控制器 3.3、RS更新pod 四、Deployment副…

IBM:2023 年数据泄露的平均成本将达到 445 万美元

IBM 发布年度《数据泄露成本报告》&#xff0c;显示 2023 年全球数据泄露平均成本达到 445 万美元&#xff0c;比过去 3 年增加了 15%。创下该报告的历史新高。 报告显示&#xff0c;企业在计划如何应对日益增长的数据泄露频率和成本方面存在分歧。研究发现&#xff0c;虽然 95…

自定义MVC

目录 一.什么是MVC 1.1.三层架构和MVC的区别 二.自定义MVC工作原理图 三.自定义mvc实现 3.1 创建web工程 3.2 中央处理器 3.3 Action接口定义 3.4 实现子控制器 3.5 完善中央控制器 3.5.1 请求分发功能 3.5.2 使用配置文件配置action 3.5.3 请求参数处理 1. 定义接…

QT DAY1

1.思维导体 2.作业 #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {qDebug()<<this->size();qDebug()<<this->rect().size();qDebug()<<this->geometry().size();qDebug()<<this->frameGeometry().siz…

安防视频管理平台GB设备接入EasyCVR, 如何获取RTMP与RTSP视频流

安防视频监控平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&#xff0c;比…

六边形架构和分层架构的区别?

六边形架构和分层架构是什么&#xff1f; 六边形架构&#xff08;Hexagonal Architecture&#xff09;和分层架构&#xff08;Layered Architecture&#xff09;是两种常见的软件架构模式。六边形架构强调将核心业务逻辑与外部依赖解耦&#xff0c;通过接口与外部世界进行通信。…

桥接模式-处理多维度变化

程序员小名去摆摊卖奶茶了&#xff0c;口味有香、甜。 型号有大、中、小。假如小名先在家里把这些奶茶装好&#xff0c;那么最少要装2x3 6杯奶茶&#xff0c;如果此时新增一个口味&#xff1a;酸&#xff0c;那么就需要多装3杯奶茶了。而且这样做&#xff0c;等客户买走一种&a…

【【51单片机直流电机调速】】

学会电机调速&#xff0c;掌握中国速度 PWM的生成方法 先用户设定一个比较值&#xff0c;然后计数器定时自增。 当计数器<比较值&#xff0c;输出0 当计数器>比较值&#xff0c;输出1 main.c #include <REGX52.H> #include"delay.h" #include"…