MFC框架内容


title: MFC框架内容
time: 2019年8月28日13:01:04
tags: MFC


MFC框架内容

基于对话框编程

模态对话框

  1. 创建基于对话框的MFC应用程序框架

    1. 选择基于对话框 – 完成
    2. 视图—资源视图–dialog–第二个
  2. ui中右击属性进行设置

  3. 工具箱插入按钮,改名字不要双击,直接选中,进行编辑就行

  4. 右击dialog插入dialog,创建另外一个对话框。右击属性,可以更改id

  5. 右击添加类,把当前类与ui关联

  6. 在主对话框中

    1. 第一种方法:双击按钮,自动创建点击鼠标事件。
    2. 第二种方法:右击button属性,选中控件组件,有事件,添加
    3. 第三种方法:右击button,插入ActiveX控件
  7. 在其中类中,进行引入需要弹出的对话框关联的类,进行操作

    #include "test.h"
    void CMFCApplication2Dlg::OnBnClickedButton1()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	test t;
    	t.DoModal();//test对话框的弹出
    }
    

非模态对话框

  • 1~6与上面一样。

  • 在其中类中,进行引入需要弹出的对话框关联的类,进行操作

    #include "test1.h"
    void CMFCApplication2Dlg::OnBnClickedButton2()
    {
    	// TODO: 在此添加控件通知处理程序代码
    
    	//test1 t1;
    	//t1.Create(IDD_TEST1);
    	//t1.ShowWindow(SW_SHOWNORMAL);
    	//这样设置,会秒退,不会一直显,因为这是局部方法,执行后,局部变量t就不存在了。
    
    	//所以需要把test1 t1的声明放到全局,当前文件的头文件中
    	//t1.Create(IDD_TEST1);
    	//t1.ShowWindow(SW_SHOWNORMAL);
    	//这样设置,虽然解决了秒退的问题,但是不能按第二次就崩了
    	//因为第二次执行这个方法是,已经创建同样的IDD_TEST1,
    	//所以要把t1.Create(IDD_TEST1);放到初始化init中
    
    	t1.ShowWindow(SW_SHOWNORMAL);
    
    
    }
    
    

静态文本控件

  1. 新建对话框项目

  2. 添加工具箱中的Static text

  3. 先右击–属性,更改id

  4. 选中右击–添加变量–选中控件–设置名称(窗口添加类映射,控件选择变量映射)

  5. 可以做事件操作了

    void CMFCApplication3Dlg::OnBnClickedButton1()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	//设置文本内容
    	m_text.SetWindowTextW(TEXT("鸣人"));
    
    }
    
    void CMFCApplication3Dlg::OnBnClickedButton2()
    {
    // TODO: 在此添加控件通知处理程序代码
    CString str;
    m_text.GetWindowTextW(str);//从控件中获取的消息,赋给str字符串
    MessageBox(str);//弹出消息
    }
    
    
    void CMFCApplication3Dlg::OnBnClickedtest()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	test.SetWindowTextW(TEXT("O(∩_∩)O哈哈~"));
    
    	//设置只能点击一次的状态
    	test.EnableWindow(FALSE);
    		
    }
    

编辑框

  1. 新建对话框项目

  2. 添加edit编辑框

  3. 添加成员变量类别为control

    1. 右击–属性–

      1. Multiline 设置多行
      2. want Return 回车换行
      3. auto Hscroll 水平无限写
      4. auto Vscroll 垂直无限写
      5. vertical scroll 垂直滚动条
      6. horizontal scroll 水平滚动条
    2. ctrl +左键拖拽 可以复制编辑框

    3. 退出对话框

      void CMFCApplication4Dlg::OnBnClickedButton2()
      {
      	//exit(0);//退出程序
          
      	//两种方式退出对话框
      	CDialog::OnOK();
      	//CDialog::OnCancel();
      }
      
    4. 新建编辑框,点回车会退出整个对话框

      1. 类视图中DLG右击—属性–点击重写–onOK–添加

      2. 注释掉

        //CDialogEx::OnOK();
        
  4. 添加成员变量为value(一般只有编辑框才设为value)

    1. 设置编辑框的内容

      void CMFCApplication4Dlg::OnBnClickedButton3()
      {
      	
      	//设置变量的内容
      	edit3 = "不骄不躁";
      	//将变量同步到控件中
      	UpdateData(FALSE);
      
      }
      
    2. 读取编辑框的内容

      void CMFCApplication4Dlg::OnBnClickedButton4()
      {
      	//将控件内容同步到变量中
      	UpdateData(true);
          
      	MessageBox(edit3);
      }
      

下拉框

  1. 新建对话框项目
  2. 工具箱–添加combo box
  • 基于界面的进行操作(右击–属性)

    • Data下输入选项,以分号隔开
    • sort–false表示按照你在data中定义的顺序
    • type – 下拉列表(droplist)表示不可以编辑
  • 基于代码的进行操作(右击–添加变量–进入类视图的DLG–在initdialog中进行操作)

    • //添加选项
      	combo.AddString(TEXT("可乐"));
      	combo.AddString(TEXT("雪碧"));
      	combo.AddString(TEXT("芬达"));
      	combo.AddString(TEXT("脉动"));
      	combo.AddString(TEXT("尖叫"));
      	combo.AddString(TEXT("维C"));
      	combo.AddString(TEXT("绿茶"));
      
      	//删除选项
      	combo.DeleteString(2);
      
      	//插入选项
      	combo.InsertString(2, TEXT("红牛"));//在下标为2的选项插入,然后下面的选项都要后移
      
      	//设置默认选项
      	combo.SetCurSel(0);
      
      	//获取当前索引
      	/*int i= combo.GetCurSel();*/
      	
      	//根据索引查询选项内容
      	/*
      	CString str;
      	combo.GetLBText(5, str);
      	MessageBox(str);
      	*/
      
    • 右击–属性–添加控件事件–CbnSelchange

       void CMFCApplication5Dlg::OnCbnSelchangeCombo1()
      {
      	// TODO: 在此添加控件通知处理程序代码
      	int i = combo.GetCurSel();
      	CString str;
      	combo.GetLBText(i, str);
      	MessageBox(str);
      }
      
      

列表控件

  • 新建对话框项目

  • 工具箱—listcontrol

  • 右击–属性–view–report 改为列表格式

  • 右击–添加变量设private–进入类视图的DLG–在initdialog中进行操作

//插入表头,也就是第一行内容
CString str[] = { TEXT(“姓名”),TEXT(“年龄”),TEXT(“性别”) };
for (int i = 0; i < 3; i++) {
m_list.InsertColumn(i, str[i],LVCFMT_CENTER,100);
}

//插入表项
for (int j = 0; j < 10; j++) {
	CString name;
	name.Format(TEXT("khoing_ % d"), j);//格式化字符串,用于带有变参字符串的定义
	m_list.InsertItem(j, name);
	m_list.SetItemText(j, 1, TEXT("22"));
	m_list.SetItemText(j, 2, TEXT("男"));
}

//设置属性,整行选中状态、显示网格
//第一个需要先获得原来风格,剩下的都是要设置的风格,中间用 | 分开
m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);

- 添加表头 InsertColumn第一参数是列的序号,第二为内容,第三位置,第四宽度
- 添加第一行的第一列 InsertItem(0, name)
- 添加第一行的其他列SetItemText(0, 1, TEXT("22")),行、列、具体的内容
- 设置风格

### 树控件

- 新建基于对话框项目
- 工具箱---treecontrol
- 右击--属性--
- haslines---true代表有显示线
- hasbuttons--true 显示折叠按钮
- lines at root 显示根节点的线

- 将下载好的icon图标放入项目中的res中icon文件夹中
- 进入资源视图,右击icon--添加资源--icon--导入

- 右击--添加变量设private--进入类视图的DLG--在initdialog中进行操作

- ```c++

//1.设置图标

 //准备icon图标,依次添加到一个数组中
 HICON icons[6];
 icons[0] = AfxGetApp()->LoadIcon(IDI_ICON1);
 icons[1] = AfxGetApp()->LoadIcon(IDI_ICON2);
 icons[2] = AfxGetApp()->LoadIcon(IDI_ICON3);
 icons[3] = AfxGetApp()->LoadIcon(IDI_ICON4);
 icons[4] = AfxGetApp()->LoadIcon(IDI_ICON5);
 icons[5] = AfxGetApp()->LoadIcon(IDI_ICON6);

 //CImageList list;//图片集合的声明
 //因为是后调用的,调用之后,系统会清楚资源。所以要把它放到全局变量中(当前文件的头文件中)
 //创建图片集合
 list.Create(30, 30, ILC_COLOR32, 5, 5);//第一个第二个每个图像的大小,第三个色位,第四个初始图像数,第五个跟第四个一样
 //把图标一次放进图片集合中。
 for (int i = 0; i < 6; i++) {
 	list.Add(icons[i]);
 }
 
 treelist.SetImageList(&list, TVSIL_NORMAL);

//2.设置结点
 HTREEITEM root = treelist.InsertItem(TEXT("根节点"), 0, 0, NULL);
 HTREEITEM parent= treelist.InsertItem(TEXT("父节点"), 1, 1, root);
 HTREEITEM son= treelist.InsertItem(TEXT("子节点"), 2, 2, parent);
 HTREEITEM grandson1= treelist.InsertItem(TEXT("子孙节点1"), 3, 3, son);
 HTREEITEM grandson2= treelist.InsertItem(TEXT("子孙节点2"), 4, 4, son);
 HTREEITEM grandson3= treelist.InsertItem(TEXT("子孙节点3"), 5, 5, son);

//3.设置默认选项
 treelist.SelectItem(root);

  • 添加 切换的控件事件

    • 右击属性–控件 事件–selchanged–add

    • void CMFCApplication7Dlg::OnTvnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
      {
      	LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
      	// TODO: 在此添加控件通知处理程序代码
      	*pResult = 0;
      
      	
      	HTREEITEM item;
      	//获取当前的选中项
      	item = treelist.GetSelectedItem();
      
      	//获取选中项的名称
      	CString str = treelist.GetItemText(item);
      
      	MessageBox(str);
      }
      
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值