MFC-列表控件的使用(报表风格)
来源:互联网 发布:28周胎儿发育情况数据 编辑:程序博客网 时间:2024/04/30 02:07
(1)创建一个对话框应用程序,其主界面如图1所示。
图1 主界面
(2)设计一个如图2所示的“学生课程成绩”对话框,创建并完善该对话框类course。
图2 “学生课程成绩”对话框
(3)实现功能:单击主界面中的“学生课程成绩”按钮,弹出“学生课程成绩”对话框,单击“添加”按钮,学生课程成绩添加到列表控件。若选中列表项,“修改”按钮由原来的禁用变成可用,单击“修改”按钮,则弹出的“学生课程成绩”对话框中的“添加”按钮标题变成“修改”,单击“学生课程成绩”对话框中的“修改”按钮,该列表项的内容被修改。
(4)添加一个“删除”按钮,若选中列表项,“删除”按钮由原来的禁用变成可用,单击“删除”按钮,删除选中的列表项。
解答:
1、利用MFC可视化编辑器完成主界面的设计,并为列表控件绑定CListCtrl
类型的变量m_ListCtrl
,将列表控件设置为report风格,即view属性为report。
2、切换到资源视图,在Dialog中插入新的对话框,即学生课程成绩对话框,完成该对话框的界面设计。
3、为“学生课程成绩”对话框添加类,基类为CDialog,类名为course。
4、为学号、课程号、成绩、学分编辑框分别绑定类型为CString的变量stu_num、course_num、score、credit。
5、为了实现单击“修改”按钮,弹出的“学生课程成绩”对话框中的“添加”按钮标题变成“修改”,我们在course类中添加一个public变量:
CString add_change_caption;
用来设定按钮标题。
6、重写course类的OnInitDialog()函数,方法见:
http://www.icoder.top/blog/index.php/2017/06/08/mfc-control-application/
BOOL course::OnInitDialog(){CDialog::OnInitDialog();// TODO: 在此添加额外的初始化 ///将按钮标题设置为添加/修改GetDlgItem(IDOK)->SetWindowTextW(add_change_caption); //添加此句的原因是点击“修改”按钮时可以将选中数据变为编辑框初始数据UpdateData(FALSE); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE}
7、为“添加/修改”按钮添加事件处理程序:
void course::OnBnClickedOk(){// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);CDialog::OnOK();}
8、回到主界面,为主对话框类(此处为CControlEx5Dlg)添加两个public变量:
int i; //记录总行数int j; //记录被选中的数据行的索引
注:也可以不添加者两个变量,用m_ListCtrl.GetItemCount()
获取总行数,用this->m_ctrList.GetNextItem(-1, LVNI_SELECTED)
获取列表控件中被选中的数据行索引。
9、在OnInitDialog()
函数中添加初始化代码:
i = 0;j = 0;GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE); //使修改按钮为不可选状态GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE); //使删除按钮为不可选状态//设置列表控件风格为网格线,选中高亮m_ctrList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); //设置表头CString strHeader[4] = { L"学号",L"课程",L"成绩",L"学分" };for (int nCol = 0; nCol < 4; nCol++){m_ListCtrl.InsertColumn(nCol, strHeader[nCol], LVCFMT_LEFT, 130);}
10、为列表控件添加事件处理程序,消息类型为LVN_ITEMCHANGED
。
void CControlEx5Dlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult){LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);// TODO: 在此添加控件通知处理程序代码GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE); //使修改按钮为可选状态GetDlgItem(IDC_BUTTON3)->EnableWindow(TRUE); //使删除按钮为可选状态j = pNMLV->iItem;*pResult = 0;}
11、为学生课程成绩按钮添加事件处理程序,消息类型为BN_CLICKED。
void CControlEx5Dlg::OnBnClickedButton1(){// TODO: 在此添加控件通知处理程序代码course dlg;dlg.add_change_caption = L"添加";if (dlg.DoModal() == IDOK){m_ListCtrl.InsertItem(i, dlg.stu_num); //插入一行,并设置该行第一个数据m_ListCtrl.SetItemText(i, 1, dlg.course_num); //设置第0行第1列数据m_ListCtrl.SetItemText(i, 2, dlg.score);m_ListCtrl.SetItemText(i, 3, dlg.credit);i++;}}
12、为修改按钮添加事件处理程序,消息类型为BN_CLICKED。
void CControlEx5Dlg::OnBnClickedButton2(){// TODO: 在此添加控件通知处理程序代码course dlg;dlg.add_change_caption = L"修改";//设置模态框的初始数据为选中的数据dlg.stu_num = m_ListCtrl.GetItemText(j, 0);dlg.course_num = m_ListCtrl.GetItemText(j, 1);dlg.score = m_ListCtrl.GetItemText(j, 2);dlg.credit = m_ListCtrl.GetItemText(j, 3);if (dlg.DoModal() == IDOK){m_ListCtrl.DeleteItem(j);m_ListCtrl.InsertItem(j - 1, dlg.stu_num);m_ListCtrl.SetItemText(j - 1, 1, dlg.course_num);;m_ListCtrl.SetItemText(j - 1, 2, dlg.score);m_ListCtrl.SetItemText(j - 1, 3, dlg.credit);}}
13、为删除按钮添加事件处理程序,消息类型为BN_CLICKED。
void CControlEx5Dlg::OnBnClickedButton3(){// TODO: 在此添加控件通知处理程序代码m_ListCtrl.DeleteItem(j);i--;}
完成。
- MFC-列表控件的使用(报表风格)
- C++/MFC-List Control(图标、报表、列表)风格
- MFC 列表控件的使用
- MFC列表控件的使用
- MFC的列表控件的使用
- MFC点点滴滴——列表框使用list control(report风格的简单使用)
- MFC下列表控件的使用
- MFC中ListCtrl列表控件的使用
- MFC中列表控件的使用
- MFC VC++6.0列表控件的使用
- MFC使用的风格
- mfc中使用列表控件
- MFC获取系统的进程及列表控件使用
- MFC获取系统的进程及列表控件使用
- MFC之设置ListCtrl控件的风格
- 关于MFC中控件的外观风格
- MFC 各个窗口 控件的风格等
- MFC的CListBox控件使用LBS_OWNERDRAWVARIABLE风格不能AddString的问题
- 【Mybatis】为什么mybatis中,插入参数时,占位符里面要写jdbcType?
- 遇到问题-----uploadify上传文件ServletFileUpload.isMultipartContent(request)为false
- Go的异常处理 defer, panic, recover<转载>
- 博弈
- 设置响应字符集 & 获取当前日期
- MFC-列表控件的使用(报表风格)
- Android仿淘宝头条垂直滚动,垂直走马灯,公告
- Android7.0中文文档(API)-- ActionMenuView.LayoutParams
- BZOJ 1710: [Usaco2007 Open]Cheappal 廉价回文 区间dp
- opentsdb之java api设计
- Android 6.0 的popwindow
- MFC-菜单和工具栏
- 超详细Tarjan算法总结,求强连通分量,割点,割边,有重边的割边
- Unity 使用物理射线(Physics.Raycast),实现扇形区域碰撞检测三种方法