MFC学习笔记(2)
基于对话框编程
- 静态文本的相关操作
- 静态文本的创建与button等控件相同
- 创建之后,可以通过点击事件更改/获取静态文本的内容;
//将静态文本设置为呵呵 void CCStatic_testDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 m_text.SetWindowTextW(TEXT("呵呵")); } //获取静态文本中的内容并弹出 void CCStatic_testDlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 CString str; m_text.GetWindowTextW(str); MessageBox(str); } - 在创建静态文本之后,与创建模态/非模态对话框类似的是,需要在代码中赋予其一个标识,因此需要为其创建变量,之后才能通过代码更改/获取其内容,方法为右键创建变量。但如果直接创建,则会出错,因为其ID包含static无法创建变量,则在创建之前,更改即可。
ps. 个人的理解是,在课程中为了讲解内容的获取和更改需要做此操作,而在实际中,静态文本一般不需要获取或更改,因此也就不需要这个操作。且对按钮的相关操作与其类似,创建成员变量之后可以更改/获取按钮的内容/属性,包括是否可按下等属性。//禁用/激活按钮。 m_btn.EnableWindow(FALSE); - 利用静态文本显示图片:只能显示bmp图片,需要添加宏,不常用,不做记录。
- 对各种控件的初始化的操作,包括初始化属性设置,或者对话框的创建(因为只能创建一次)均在Dlg类的OnInitDialog()之中完成。
- 编辑框的使用
- 与其他控件不同的地方很少,主要是在编辑框的属性,可以设置是否自动换行,是否显示滚动条等;
- 如上条5.所说,对编辑框初始内容的设置需要添加成员变量,并在对话框的初始化方法中对其进行初始化。
- 对于对话框的关闭,有OnOK()和OnCancel()两种方式,个人理解就是 确认和取消的区别,但都可以推出当前对话框。
- 设置和获取内容均为set和get。
- MFC默认单行敲击回车会自动确认,即调用OnOK()函数。
- 关于值类型的编辑框:
- 其变量本身的值,与控件的显示的值相互关联,通过Update()方法来相互更新,使得值传递更加方便
- Update()接收bool类型的参数,TRUE代表将控件当前的内容更新到变量之中,反之则反。
void CEdit_testDlg::OnBnClickedButton3() { // TODO: 在此添加控件通知处理程序代码 //传入值 v_edit = TEXT("呵呵"); //更新控件 将变量的内容更新到控件中 UpdateData(FALSE); } void CEdit_testDlg::OnBnClickedButton4() { // TODO: 在此添加控件通知处理程序代码 //更新变量 将控件的内容更新到变量中 UpdateData(TRUE); MessageBox(v_edit); }
- 下拉框控件的使用
- 控件常规操作大致相同,下拉控件的内容可以在属性的data中更改,同样也可以在代码中使用
m_cbx.AddString(TEXT("狗")); m_cbx.AddString(TEXT("猫")); m_cbx.AddString(TEXT("鸡")); m_cbx.AddString(TEXT("鸭")); //设置默认索引 m_cbx.SetCurSel(0); //插入 m_cbx.InsertString(2, TEXT("兔")); //删除 m_cbx.DeleteString(2); //获取一号索引的具体内容 CString str; m_cbx.GetLBText(1, str); MessageBox(str); - 对于下拉更改的事件,与其他事件触发的机制大致相同,在其触发事件中编写相应代码即可。
void CComboBoxCtrlDlg::OnCbnSelchangeCombo1() { // TODO: 在此添加控件通知处理程序代码 //拿到索引位置 int index = m_cbx.GetCurSel(); CString str; m_cbx.GetLBText(index,str); MessageBox(str); }
- 控件常规操作大致相同,下拉控件的内容可以在属性的data中更改,同样也可以在代码中使用
- 列表控件的使用
- 列表控件特有属性,view属性选择不同,有不同的显示方式
- 对列表的内容的初始化同样需要在Dialog类中的init函数中进行初始化,主要用到的函数如下列代码:
//列表控件的使用 CString str1[] = { TEXT("姓名"), TEXT("性别"), TEXT("年龄") }; for (int i = 0; i < 3; i++) { //设置表头 参数含义 1.列数 2.列名 3.对齐方式 4.列宽 m_list.InsertColumn(i, str1[i],LVCFMT_LEFT,100); } //设置正文 //表头不属于正文内容,因此正文索引从零开始索引 //添加元素 参数含义 1.行索引 2.内容 m_list.InsertItem(0,TEXT("张三")); //给这个Item插入其他列的数据 //参数 1.行索引 2.列索引 3.内容 m_list.SetItemText(0, 1, TEXT("男")); m_list.SetItemText(0, 2, TEXT("23")); for (int i = 1; i < 10; i++) { //此处可以使用CString对字符串进行拼贴 CString name; name.Format(TEXT("张三_%d"),i); m_list.InsertItem(i, name); m_list.SetItemText(i, 1, TEXT("男")); m_list.SetItemText(i, 2, TEXT("23")); } //设置属性 整行选中状态 显示网格 //参数 有关属性的宏 GetExtendStyle()函数的意义是继承之前所有已经设置好的属性 m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
本文档是MFC学习笔记的第二部分,重点介绍了如何进行基于对话框的编程,包括静态文本的创建与操作,如何显示图片,编辑框的使用,设置与获取内容的方法,以及下拉框和列表控件的使用技巧。静态文本的ID更改是为了在代码中操作内容,编辑框可以设置自动换行和滚动条,下拉框内容的修改和事件处理,列表控件则根据view属性展示不同样式。
766

被折叠的 条评论
为什么被折叠?



