【MFC入门】之三 标准控件在可视化编程中的应用之组合框控件
2016-07-03 20:17
260 查看
组合框顾名思义既可以输入又可以选择就叫做组合框
组合框的sort风格会对初始化后的内容进行排序,如果不需要进行排序应该在选中组合框控件的时候将sort风格取消
OnInitDialog中添加初始化程序
UpdateData(TRUE);将对话框各空间的内容更新到所对应的成员变量当中
UpdateData(FALSE);将成员变量的值更新到对话框中的控件
指向对象的指针函数GetDlgItem使得两个复选框复选
GetDlgItem(IDC_DATE_EDIT)->ShowWindow(SW_SHOW);等价于
m_DateEdit.ShowWindow(SW_SHOW);
GetCheckedRadioButton获取选中ID号码
_CRT_SECURE_NO_WARNINGS;指令消除安全因素原因报错
SelectString(-1,L"**")为显示默认初始值的成员函数
通过调用UpdateData(TRUE/FALSE)实施更新
组合框有sort风格会对里边内容实施排序需要实现下面功能首先要取消sort风格
实现程序如下,首先是在初始化的地方加入星期**,退出代码就一个OnOK(),不写进去
如下代码
然后因为选择组合框将会产生CBN_SELCHANGE消息,因此添加下列相应函数
下面为相关相应函数的代码
UpdateData(TRUE);将对话框各空间的内容更新到所对应的成员变量当中
UpdateData(FALSE);将成员变量的值更新到对话框中的控件
第一步编写Check的响应函数
1,获取时间 2,获取响应 3,选中编辑框并且更新编辑框
接下来编写显示以及隐藏按钮的响应函数
调用函数为ShowWindow,对于成员变量来说这只是一个成员函数,对于那些ID来说使用指向对象的指针函数GetDlgItem使得两个复选框复选
备注
GetDlgItem(IDC_DATE_EDIT)->ShowWindow(SW_SHOW);等价于m_DateEdit.ShowWindow(SW_SHOW);
为显示和隐藏的两种写法,可以二选一
第三步编写 使能和旁置的响应函数
调用成员函数EnableWindow,使用方法与上述大同小异
第四步编写性别显示按钮的响应函数
这里体现了为什么那些RadioButton要定义为int型变量的原因
调用GetCheckedRadioButton获取选中ID号码,如果选中了该ID则进行copy和级联的操作
注意在VS2012及以上的版本考虑到安全性可能无法直接使用_tcscpy等函数
可以通过在C++预处理器中加入_CRT_SECURE_NO_WARNINGS;指令消除报错
与上面第五步没有什么区别
第七步初始化函数的编写
设置初始响应以及组合框下拉列表中应该有哪些东西
SelectString(-1,L"**")为显示默认初始值的成员函数
通过调用UpdateData(TRUE/FALSE)实施更新
组合框的sort风格会对初始化后的内容进行排序,如果不需要进行排序应该在选中组合框控件的时候将sort风格取消
OnInitDialog中添加初始化程序
UpdateData(TRUE);将对话框各空间的内容更新到所对应的成员变量当中
UpdateData(FALSE);将成员变量的值更新到对话框中的控件
指向对象的指针函数GetDlgItem使得两个复选框复选
GetDlgItem(IDC_DATE_EDIT)->ShowWindow(SW_SHOW);等价于
m_DateEdit.ShowWindow(SW_SHOW);
GetCheckedRadioButton获取选中ID号码
_CRT_SECURE_NO_WARNINGS;指令消除安全因素原因报错
SelectString(-1,L"**")为显示默认初始值的成员函数
通过调用UpdateData(TRUE/FALSE)实施更新
第一个练习:选择显示星期数
相对简单创建一个组合框控件,通过下拉列表直接选择到底是礼拜几,选中以后弹出一个MessageBox上面显示选中的星期数组合框有sort风格会对里边内容实施排序需要实现下面功能首先要取消sort风格
实现程序如下,首先是在初始化的地方加入星期**,退出代码就一个OnOK(),不写进去
如下代码
BOOL C星期选择练习Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 m_cb.AddString(L"星期一"); m_cb.AddString(L"星期二"); m_cb.AddString(L"星期三"); m_cb.AddString(L"星期四"); m_cb.AddString(L"星期五"); m_cb.AddString(L"星期六"); m_cb.AddString(L"星期天"); // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE }
然后因为选择组合框将会产生CBN_SELCHANGE消息,因此添加下列相应函数
void C星期选择练习Dlg::OnCbnSelchangeCombo() { // TODO: 在此添加控件通知处理程序代码 CString msg; m_cb.GetLBText(m_cb.GetCurSel(), msg); //返回组合框列表中制定条目的字符串 AfxMessageBox(msg); }简而言之,该程序主要flow如下图
第二个练习:创建一个简单的成绩系统
如下图所示可以实现显示隐藏,可输入不可输入,显示时间/日期,选择性别,年龄,课程等操作下面为相关相应函数的代码
UpdateData(TRUE);将对话框各空间的内容更新到所对应的成员变量当中
UpdateData(FALSE);将成员变量的值更新到对话框中的控件
第一步编写Check的响应函数
1,获取时间 2,获取响应 3,选中编辑框并且更新编辑框
//该程序为 日期Check的响应函数 void CApplicationofSELECTBOXDlg::OnBnClickedDateCheck() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); //当前的屏幕显示内容更新空间的变量 //等同于从屏幕上读取变量的值,然后将这些值 //刷新到与控件绑定的变量中 { CTime tNow; tNow = CTime::GetCurrentTime(); CString sNow = tNow.Format("%y年%m月%d日"); if (m_DateCheck == TRUE) { m_DateEdit.SetSel(0, -1); m_DateEdit.ReplaceSel(sNow); } else { m_DateEdit.SetSel(0, -1); m_DateEdit.ReplaceSel(L""); } } UpdateData(FALSE); } //该程序为 时间Check的响应函数 void CApplicationofSELECTBOXDlg::OnBnClickedTimeCheck() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); { CTime tNow; tNow = CTime::GetCurrentTime(); CString sNow = tNow.Format("%I时%M分%S秒"); if (m_TimeCheck == TRUE) { m_TimeEdit.SetSel(0, -1); m_TimeEdit.ReplaceSel(sNow); } else { m_TimeEdit.SetSel(0, -1); m_TimeEdit.ReplaceSel(L""); } } UpdateData(FALSE); }
接下来编写显示以及隐藏按钮的响应函数
调用函数为ShowWindow,对于成员变量来说这只是一个成员函数,对于那些ID来说使用指向对象的指针函数GetDlgItem使得两个复选框复选
备注
GetDlgItem(IDC_DATE_EDIT)->ShowWindow(SW_SHOW);等价于m_DateEdit.ShowWindow(SW_SHOW);
为显示和隐藏的两种写法,可以二选一
//显示按钮 void CApplicationofSELECTBOXDlg::OnBnClickedShowButton() { // TODO: 在此添加控件通知处理程序代码 GetDlgItem(IDC_DATE_CHECK)->ShowWindow(SW_SHOW); GetDlgItem(IDC_TIME_CHECK)->ShowWindow(SW_SHOW); GetDlgItem(IDC_DATE_EDIT)->ShowWindow(SW_SHOW); GetDlgItem(IDC_TIME_EDIT)->ShowWindow(SW_SHOW); m_DateEdit.ShowWindow(SW_SHOW); m_TimeEdit.ShowWindow(SW_SHOW); } //隐藏按钮 void CApplicationofSELECTBOXDlg::OnBnClickedHideButton() { // TODO: 在此添加控件通知处理程序代码 GetDlgItem(IDC_DATE_CHECK)->ShowWindow(SW_HIDE); GetDlgItem(IDC_TIME_CHECK)->ShowWindow(SW_HIDE); GetDlgItem(IDC_DATE_EDIT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_TIME_EDIT)->ShowWindow(SW_HIDE); m_DateEdit.ShowWindow(SW_HIDE); m_TimeEdit.ShowWindow(SW_HIDE); }
第三步编写 使能和旁置的响应函数
调用成员函数EnableWindow,使用方法与上述大同小异
void CApplicationofSELECTBOXDlg::OnBnClickedEnableButton() { GetDlgItem(IDC_DATE_CHECK)->EnableWindow(TRUE); GetDlgItem(IDC_TIME_CHECK)->EnableWindow(TRUE); m_DateEdit.EnableWindow(TRUE); m_TimeEdit.EnableWindow(TRUE); // TODO: 在此添加控件通知处理程序代码 } void CApplicationofSELECTBOXDlg::OnBnClickedDisableButton() { // TODO: 在此添加控件通知处理程序代码 GetDlgItem(IDC_DATE_CHECK)->EnableWindow(FALSE); GetDlgItem(IDC_TIME_CHECK)->EnableWindow(FALSE); m_DateEdit.EnableWindow(FALSE); m_TimeEdit.EnableWindow(FALSE); }
第四步编写性别显示按钮的响应函数
这里体现了为什么那些RadioButton要定义为int型变量的原因
调用GetCheckedRadioButton获取选中ID号码,如果选中了该ID则进行copy和级联的操作
注意在VS2012及以上的版本考虑到安全性可能无法直接使用_tcscpy等函数
可以通过在C++预处理器中加入_CRT_SECURE_NO_WARNINGS;指令消除报错
void CApplicationofSELECTBOXDlg::OnBnClickedShowSexAgeButton() { // TODO: 在此添加控件通知处理程序代码 TCHAR sEdit[50]; int iSexRADIO; int iAgeRADIO; iSexRADIO = GetCheckedRadioButton(IDC_BOY_RADIO, IDC_GIRL_RADIO); if (iSexRADIO == IDC_BOY_RADIO) _tcscpy(sEdit, L"男孩年龄");//相当于strcpy if (iSexRADIO == IDC_GIRL_RADIO) _tcscpy(sEdit, L"女孩年龄"); iAgeRADIO = GetCheckedRadioButton(IDC_AGE1_RADIO, IDC_AGE3_RADIO); if (iAgeRADIO == IDC_AGE1_RADIO) _tcscat(sEdit, L"大于20岁"); if (iAgeRADIO == IDC_AGE2_RADIO) _tcscat(sEdit, L"15到20岁"); if (iAgeRADIO == IDC_AGE3_RADIO) _tcscat(sEdit, L"小于15岁");//相当于strcat m_ResultEdit.SetSel(0, -1); m_ResultEdit.ReplaceSel(sEdit); }第六步显示按钮响应函数编写
与上面第五步没有什么区别
void CApplicationofSELECTBOXDlg::OnBnClickedShowResultButton() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); TCHAR sCourseEdit[30]; TCHAR sRecordEdit[15]; int iCourseRadio;//注意像存储ID的都要定义int型变量 iCourseRadio = GetCheckedRadioButton(IDC_ENGLISH_RADIO, IDC_NATURE_RADIO); if (iCourseRadio == IDC_ENGLISH_RADIO) _tcscpy(sCourseEdit, L"英语成绩为"); if (iCourseRadio == IDC_COMPUTER_RADIO) _tcscpy(sCourseEdit, L"电脑成绩为"); if (iCourseRadio == IDC_NATURE_RADIO) _tcscpy(sCourseEdit, L"自然成绩为"); m_Record.GetWindowText(sRecordEdit, 15); _tcscat(sCourseEdit, L""); _tcscat(sCourseEdit, sRecordEdit); m_ComboEdit = sCourseEdit; UpdateData(FALSE); }
第七步初始化函数的编写
设置初始响应以及组合框下拉列表中应该有哪些东西
SelectString(-1,L"**")为显示默认初始值的成员函数
通过调用UpdateData(TRUE/FALSE)实施更新
BOOL CApplicationofSELECTBOXDlg::OnInitDialog() { CDialogEx::OnInitDialog(); /**/ CheckRadioButton(IDC_BOY_RADIO, IDC_GIRL_RADIO, IDC_BOY_RADIO); CheckRadioButton(IDC_AGE1_RADIO, IDC_AGE2_RADIO, IDC_AGE2_RADIO); UpdateData(TRUE); m_English = 0; m_SexRadio = 0; m_AgeRadio = 0; m_Record.AddString(L"85"); m_Record.AddString(L"90"); m_Record.AddString(L"95"); m_Record.SelectString(-1,L"95");//显示默认初始值 UpdateData(FALSE); // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE }
相关文章推荐
- 华为OJ——判断两个IP是否属于同一子网
- 华为OJ——求小球落地5次后所经历的路程和第5次反弹的高度
- 华为OJ——统计每个月兔子的总数
- Delphi for iOS开发指南(5):在iOS应用程序中使用Calendar组件来选择日期
- 华为OJ——字符串加密
- 华为OJ——蛇形矩阵
- 华为OJ——图片整理
- 华为OJ——整数与IP地址间的转换
- java计算器实现,百行代码,清晰注释
- 华为OJ——字符串运用-密码截取
- C# 文件操作 把文件读取到字节数组
- 华为OJ——[中级]单词倒排
- 华为OJ——字符串合并处理
- 登录案例解析
- 解决fonts.googleapis.com不能访问,导致网页打不开
- 利用PyCharm进行Python远程调试
- 华为OJ——字符串加解密
- C++虚函数表解析
- 华为OJ——素数伴侣
- Delphi for iOS开发指南(3):创建一个FireMonkey iOS应用程序