组合框顾名思义既可以输入又可以选择就叫做组合框
组合框的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 }
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 }