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_TIMEenum { IDD = IDD_INPUT_DLG };
#endifprotected: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); //使用关联数值变量后可不用getdlgitemstr.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();elseNextDlgCtrl();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.mzph.cn/news/6865.shtml

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

相关文章

小程序 user agent stylesheet 覆盖了page下wxss背景色

如下图&#xff1a; login页面的page下的背景色&#xff0c;被&#xff1a;user agent stylesheet覆盖。 分析与解决&#xff1a; 1、user agent stylesheet是浏览器默认样式表&#xff0c;是浏览器默认样式。 2、不同浏览器的默认样式不同个&#xff0c;甚至同种浏览器不同版…

2023年7月杭州/武汉/深圳制造业产品经理NPDP认证招生

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

vue2和vue3关于class类的绑定以及style的绑定的区别

本篇为个人笔记 1.对于class类的绑定的区别 vue2:对于vue2而言&#xff0c;所有类的绑定都是基于对象{}来进行的 例如&#xff1a;单个类绑定 <div :class"{active:isActive}"></div> 多个类绑定&#xff1a; <div :class"{active,hasError…

Vue--声明式导航

一、声明式导航-导航链接 1.需求 实现导航高亮效果 如果使用a标签进行跳转的话&#xff0c;需要给当前跳转的导航加样式&#xff0c;同时要移除上一个a标签的样式&#xff0c;太麻烦&#xff01;&#xff01;&#xff01; 2.解决方案 vue-router 提供了一个全局组件 router…

FPGA_学习_13_方差计算小模块

测距器件APD的性能与器件本身的温度、施加在APD的偏置电压息息相关。 在不同的温度下&#xff0c;APD的偏压对测距性能的影响非常大。 要确定一个合适的APD的偏压Vopt&#xff0c;首先你要知道当前温度下&#xff0c;APD的击穿电压Vbr&#xff0c;一般来讲&#xff0c;Vopt Vb…

【性能优化】MySQL百万数据深度分页优化思路分析

业务场景 一般在项目开发中会有很多的统计数据需要进行上报分析&#xff0c;一般在分析过后会在后台展示出来给运营和产品进行分页查看&#xff0c;最常见的一种就是根据日期进行筛选。这种统计数据随着时间的推移数据量会慢慢的变大&#xff0c;达到百万、千万条数据只是时间问…

FPGA学习——实现任意倍分频器(奇数/偶数倍分频器均可实现)

文章目录 一、分频器二、Verilog实现任意倍分频器2.1、Verilog源码2.2、仿真文件 三、仿真波形图 一、分频器 在FPGA&#xff08;可编程逻辑门阵列&#xff09;中&#xff0c;分频器是一种用于将时钟信号的频率降低的电路或模块。它可以根据输入的时钟信号生成一个较低频率的输…

python+unittest+requests+HTMLRunner搭建接口测试框架,执行用例请求多个不同请求方式的接口

问题描述&#xff1a; 搭建接口测试框架&#xff0c;执行用例请求多个不同请求方式的接口 实现步骤&#xff1a; ① 创建配置文件config.ini&#xff0c;写入部分公用参数&#xff0c;如接口的基本url、测试报告文件路径、测试数据文件路径等配置项 1 [DATABASE] 2 data_add…

Llama2开源大模型的新篇章以及在阿里云的实践

Llama一直被誉为AI社区中最强大的开源大模型。然而&#xff0c;由于开源协议的限制&#xff0c;它一直不能被免费用于商业用途。然而&#xff0c;这一切在7月19日发生了改变&#xff0c;当Meta终于发布了大家期待已久的免费商用版本Llama2。Llama2是一个由Meta AI开发的预训练大…

Redis的9种数据类型与数据持久化

系列文章传送门&#xff1a; 【七天入门数据库】第一天 MySQL的安装部署 【七天入门数据库】第二天 数据库理论基础 【七天入门数据库】第三天 MySQL的库表操作 【七天入门数据库】第四天 数据操作语言DML 一、Redis的9种数据类型的基本操作 &#xff08;一&#xff09;k…

用OpenCV图像处理技巧之白平衡算法(一)

1. 引言 欢迎继续来到我们的图像处理系列&#xff0c;在这里我们将探讨白平衡的关键技术。如果大家曾经拍过一张看起来暗淡、褪色或颜色不自然的照片&#xff0c;那么此时大家就需要了解到白平衡技术的重要性。在本文中&#xff0c;我们将深入探讨白平衡的概念&#xff0c;并探…

idea+springboot+jpa+maven+jquery+mysql进销存管理系统源码

ideaspringbootjpamavenjquerymysql进销存管理系统 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.首页3.采购订单4.收货入库5. 采购退货6. 商品入库7. 商品出库8. 库存查询9.商品移库10.库存盘点11.销售订单12.发货出库13.销售退货14.商品查询15. 供应商查询16.客户查询…

微信小程序将接口返回的文件流预览导出Excel文件并转发

把接口url替换就可以用了 exportExcel () {wx.request({url: importMyApply, //这个地方是你获取二进制流的接口地址method: POST,responseType: "arraybuffer", //特别注意的是此处是请求文件流必须加上的属性&#xff0c;不然你导出到手机上的时候打不开&#xff…

Jetson Orin Nano 平台适配IMX585 camera驱动调试记录

1. 前言 Jetson Orin Nano Devkit适配imx585 camera 使用argus_camera捕获流,图片是黑色的 用示波器来测量mipi信号,信号正常 Jetpack版本: sensor参数: dts配置: mode0 { /* */ mclk_khz = “24000”; num_lanes = “4”; tegra_sinterface = “serial_c”; ph…

“VCMessage”任务意外失败

从网上查到很多都是说设置这个位置&#xff0c;但是我的已经是对的&#xff0c;还是出现 “VCMessage”任务意外失败这个错误。 又查到一个人说解决方法是更正OutputPath或从父级继承&#xff1a;右键单击项目,然后转到"属性">"链接器">"常规&q…

mac brew安装 node 踩坑日记- n切换node不生效

最近用了一个旧电脑开发&#xff0c;发现里面node管理混乱&#xff0c;有nvm、n和homebrew&#xff0c;导致切换node 切换不了&#xff0c;开发也有莫名其妙的错误。所以我打算重新装一下node&#xff0c;使用n做为管理工具。 1. 删除nvm cd ~ rm -rf .nvm2. 删除n sudo rm -…

GAMS---典型优化模型和算法介绍、GAMS安装和介绍、GAMS程序编写、GAMS程序调试、实际应用算例演示与经验分享

优化分析是很多领域中都要面临的一个重要问题&#xff0c;求解优化问题的一般做法是&#xff1a;建立模型、编写算法、求解计算。常见的问题类型有线性规划、非线性规划、混合整数规划、混合整数非线性规划、二次规划等&#xff0c;优化算法包括人工智能算法和内点法等数学类优…

Vue移动端项目--瑞幸咖啡重构优化

来了客官&#xff0c;好久不见&#xff01; 从年初开始&#xff0c;就有个想法&#xff0c;想着把之前做过的项目重新整理一下。毕竟今时不同往日&#xff0c;从现在的角度去看曾经做过的项目&#xff0c;倒是觉得有很多稚嫩的地方。毕竟无论做什么都是熟能生巧&#xff0c;由浅…

字符串 (2)--- 前缀函数与 KMP 算法

/* https://www.luogu.com.cn/problem/UVA455 最小周期&#xff1a; n - pi[n -1] */ #include <iostream> #include <string> #include <vector> using namespace std; vector<int> prefix_fun(string s) { int len s.length(); /…

深度学习——批标准化Batch Normalization

什么是批标准化&#xff1f; 批标准化&#xff08;Batch Normalization&#xff09;是深度学习中常用的一种技术&#xff0c;旨在加速神经网络的训练过程并提高模型的收敛速度。 批标准化通过在神经网络的每一层中对输入数据进行标准化来实现。具体而言&#xff0c;对于每个输…