title: MFC框架内容
time: 2019年8月28日13:01:04
tags: MFC
MFC框架内容
基于对话框编程
模态对话框
-
创建基于对话框的MFC应用程序框架
- 选择基于对话框 – 完成
- 视图—资源视图–dialog–第二个
-
ui中右击属性进行设置
-
工具箱插入按钮,改名字不要双击,直接选中,进行编辑就行
-
右击dialog插入dialog,创建另外一个对话框。右击属性,可以更改id
-
右击添加类,把当前类与ui关联
-
在主对话框中
- 第一种方法:双击按钮,自动创建点击鼠标事件。
- 第二种方法:右击button属性,选中控件组件,有事件,添加
- 第三种方法:右击button,插入ActiveX控件
-
在其中类中,进行引入需要弹出的对话框关联的类,进行操作
#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); }
静态文本控件
-
新建对话框项目
-
添加工具箱中的Static text
-
先右击–属性,更改id
-
选中右击–添加变量–选中控件–设置名称(窗口添加类映射,控件选择变量映射)
-
可以做事件操作了
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); }
编辑框
-
新建对话框项目
-
添加edit编辑框
-
添加成员变量类别为control
-
右击–属性–
- Multiline 设置多行
- want Return 回车换行
- auto Hscroll 水平无限写
- auto Vscroll 垂直无限写
- vertical scroll 垂直滚动条
- horizontal scroll 水平滚动条
-
ctrl +左键拖拽 可以复制编辑框
-
退出对话框
void CMFCApplication4Dlg::OnBnClickedButton2() { //exit(0);//退出程序 //两种方式退出对话框 CDialog::OnOK(); //CDialog::OnCancel(); }
-
新建编辑框,点回车会退出整个对话框
-
类视图中DLG右击—属性–点击重写–onOK–添加
-
注释掉
//CDialogEx::OnOK();
-
-
-
添加成员变量为value(一般只有编辑框才设为value)
-
设置编辑框的内容
void CMFCApplication4Dlg::OnBnClickedButton3() { //设置变量的内容 edit3 = "不骄不躁"; //将变量同步到控件中 UpdateData(FALSE); }
-
读取编辑框的内容
void CMFCApplication4Dlg::OnBnClickedButton4() { //将控件内容同步到变量中 UpdateData(true); MessageBox(edit3); }
-
下拉框
- 新建对话框项目
- 工具箱–添加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); }
-