MFC学习笔记(2)

本文档是MFC学习笔记的第二部分,重点介绍了如何进行基于对话框的编程,包括静态文本的创建与操作,如何显示图片,编辑框的使用,设置与获取内容的方法,以及下拉框和列表控件的使用技巧。静态文本的ID更改是为了在代码中操作内容,编辑框可以设置自动换行和滚动条,下拉框内容的修改和事件处理,列表控件则根据view属性展示不同样式。

MFC学习笔记(2)

基于对话框编程

  1. 静态文本的相关操作
    1. 静态文本的创建与button等控件相同
    2. 创建之后,可以通过点击事件更改/获取静态文本的内容;
      //将静态文本设置为呵呵
      void CCStatic_testDlg::OnBnClickedButton1()
      {
      	// TODO:  在此添加控件通知处理程序代码
      	m_text.SetWindowTextW(TEXT("呵呵"));
      }
      
      //获取静态文本中的内容并弹出
      void CCStatic_testDlg::OnBnClickedButton2()
      {
      	// TODO:  在此添加控件通知处理程序代码
      	CString str;
      	m_text.GetWindowTextW(str);
      	MessageBox(str);
      }	
      
    3. 在创建静态文本之后,与创建模态/非模态对话框类似的是,需要在代码中赋予其一个标识,因此需要为其创建变量,之后才能通过代码更改/获取其内容,方法为右键创建变量。但如果直接创建,则会出错,因为其ID包含static无法创建变量,则在创建之前,更改即可。
      ps. 个人的理解是,在课程中为了讲解内容的获取和更改需要做此操作,而在实际中,静态文本一般不需要获取或更改,因此也就不需要这个操作。且对按钮的相关操作与其类似,创建成员变量之后可以更改/获取按钮的内容/属性,包括是否可按下等属性。
      //禁用/激活按钮。
      m_btn.EnableWindow(FALSE);
      
    4. 利用静态文本显示图片:只能显示bmp图片,需要添加宏,不常用,不做记录。
    5. 对各种控件的初始化的操作,包括初始化属性设置,或者对话框的创建(因为只能创建一次)均在Dlg类的OnInitDialog()之中完成。
  2. 编辑框的使用
    1. 与其他控件不同的地方很少,主要是在编辑框的属性,可以设置是否自动换行,是否显示滚动条等;
    2. 如上条5.所说,对编辑框初始内容的设置需要添加成员变量,并在对话框的初始化方法中对其进行初始化。
    3. 对于对话框的关闭,有OnOK()和OnCancel()两种方式,个人理解就是 确认和取消的区别,但都可以推出当前对话框。
    4. 设置和获取内容均为set和get。
    5. MFC默认单行敲击回车会自动确认,即调用OnOK()函数。
    6. 关于值类型的编辑框:
      • 其变量本身的值,与控件的显示的值相互关联,通过Update()方法来相互更新,使得值传递更加方便
      • Update()接收bool类型的参数,TRUE代表将控件当前的内容更新到变量之中,反之则反。
         	void CEdit_testDlg::OnBnClickedButton3()
         {
         // TODO:  在此添加控件通知处理程序代码
         //传入值
         v_edit = TEXT("呵呵");
         //更新控件 将变量的内容更新到控件中
         UpdateData(FALSE);
      }
      void CEdit_testDlg::OnBnClickedButton4()
      {
         // TODO:  在此添加控件通知处理程序代码
         //更新变量 将控件的内容更新到变量中
         UpdateData(TRUE);
         MessageBox(v_edit);
      }
      
  3. 下拉框控件的使用
    1. 控件常规操作大致相同,下拉控件的内容可以在属性的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);
      
    2. 对于下拉更改的事件,与其他事件触发的机制大致相同,在其触发事件中编写相应代码即可。
      	void CComboBoxCtrlDlg::OnCbnSelchangeCombo1()
      {
      	// TODO:  在此添加控件通知处理程序代码
      
      	//拿到索引位置
      	int index = m_cbx.GetCurSel();
      	CString str;
      	m_cbx.GetLBText(index,str);
      	MessageBox(str);
      }
      
  4. 列表控件的使用
    1. 列表控件特有属性,view属性选择不同,有不同的显示方式
    2. 对列表的内容的初始化同样需要在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);
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值