为了支持消息映射,MFC提供了下列宏:
消息映射的声明和分界宏
DECLARE_MESSAGE_MAP |
声明将在一个类中使用消息映射,把消息映射到函数(必须用在类声明中) |
BEGIN_MESSAGE_MAP |
开始消息映射的定义(必须用在类实现中) |
END_MESSAGE_MAP |
结束消息映射的定义(必须用在类实现中) |
BEGIN_MESSAGE_MAP 需要填写两个参数
鼠标左键 记住一个单词 LWM_消息处理函数:L-M 里面都是鼠标按下的消息映射;
Cstring。Format(TEXT”X=%D,y=%D”),point.x
CpaintDC 在帮助文档里面找 对应功能;
声明宏 写到.h 中
分界宏 写道.cpp中
函数原型 声明到.cpp中
鼠标,键盘,绘图,
- 1分字符对应1个字节 多个字节
中文 1个字符对应多个字节 宽字节
自动编码的格式转换,使用多字节的使用编码
//多字节转为 宽字节 messag(L“sss”);
//TCHER 自适应编码的转换
//统计字符串长度
Int num=0;
Char *p =“aaaa”;
Num = strlen(p);
//统计宽字节的字符串长度
Wchat-t *p2=L”bbb”;
Num = wcsle(p2);
//char * 与cstring 之间的转换
Char*->cstring
Char*p3=”cccc”;
Cstring str =cstring(p3);
- 利用向导创建MFC
MFC的创建MFC 的创建的标准,
MFC开发 CmainFrame
View 视类 相片 MainFram 类相框
创建按键敲击事件,在MFCFCDLG 里面找事件,点击后会自动生成相对应的函数,如果不需要就重复以上步骤,会自动注释
如果需界面显示,必须显示在相框里面,CMFCDLG 点击事件。在对应函数里面加入代码:
CString str;
str.Format(TEXT("%d=x,%d=y"), point.x, point.y);
MessageBox(str);
画图:
void CMFCDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CDialogEx::OnPaint()
dc.TextOutW(100,100,TEXT("为了自己"));
}/如果有了On Draw 不要有Onpaint了,同时存在的话 OnPaint会把OnDraw 覆盖掉
On create与crested的区别:
MFC 中后缀EX的为扩展函数;
Afx 为全局函数
- 模态与非模态的实现:{基于对话框的控件}
创建按键:在Dialog 点击插入Dialog 对话框 有对应的ID名称,自己可以修改,
如果想创建Ui的界面必须要有独立的.h 与.cpp文件
在对应的界面创建一个新的类。可以在类视中查看对应的类函数
创建一个单击事件,(这个是第一种的添加的方式)
右键,添加事件处理函数,对应生成代码
直接点击图标自动生产对应函数;
先引用头文件,添加头文件#include "DlgExec.h" 不使用C ;
创建新的窗口-> 修改ID ;
在创建新的类函数;在住窗口点击对应按键,添加 头文件,CDlogShow fff;
fff.DoModal();
(不同的是,在添加头文件时,不可以出现C字母,在程序使用时对应需要添加C)
第二种方法,创建窗口只能创建一次fff.Create(IDD_SHOW);多次就会崩掉;
吧函数放到初始化中,
就避免崩掉的现象;
在对应的.文件中生成全局变量;
所对应的函数 在帮助文档查找:
- 静态文本控件:
可以显示文字,图片;
GetwindRect();获取控件大小的背景;
改变按键内的内容:
m_btn.SetWindowTextW(TEXT("^_^"));
CString str;
m_btn.GetWindowTextW(str);
MessageBox(str);
//设置点击状态,只点击一次后,自动销毁
m_btn.EnableWindow(FALSE);
- 编辑框的使用,属性:
最基本的属性的设置;
如果串窗口的控件变量很多,在类向导里面可以自己查找到对应的变量;
改变控件的内容;m_text = TEXT("haha");
获取里面内容同步到控件中:UpdateData(TRUE);
//将变量的内容,同步到控件中:UpdateData(FALSE);
- 下拉框的使用:
工具里面的对应属性;排序的规则;
添加内容:
默认选项:m_cbx.SetCurSel(列号);
添加:m_cbx.AddString(TEXT("456"));
插入:m_cbx.InsertString(索引的编号,TEXT("大哥"));
删除:m_cbx.DeleteString(3);
获取1号的索引的具体内容 m_cbx.GetLBText(索引的列号, str);
属性里面设置触发事件:void CMFCcombBoxCtrlDlg::OnCbnSelchangeCombo1()
int inder=m_cbx.GetCurSel();
CString str; //拿到索引的位置
m_cbx.GetLBText(inder, str);
MessageBox(str); //直接弹出索引的内容
- List Control
属性:显示列
Report为报表模式;
BOOL CMFCListCtrlDlg::OnInitDialog()在初始化的函数中:“
//列表控件的使用
CString str[] = { TEXT("姓名"),TEXT("性别"),TEXT("年龄") };
for (int i=0;i<3;i++)
//设置表头 参数 索引 2内容 3对齐方式 4列宽
m_list.InsertColumn(i, str[i], LVCFMT_LEFT, 100);
//表头不算正文内容 索引从0 开始
//m_list.InsertItem(0, TEXT("张三"));
//插入 m_list.SetItemText(0, 1, TEXT("男"));
for (int i=0;i<10;i++)
{ CString str;int j=0;
str.Format(TEXT("张三%d"), i);
m_list.InsertItem(i,str);
m_list.SetItemText(i, ++j, TEXT("男"));
m_list.SetItemText(i, ++j, TEXT("18"));
} //全部添加到列表里面的内容
//设置属性 整行选中状态 显示网格
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT| LVS_EX_GRIDLINES);
- 树控件的操作():
- 属性添加变量
- 更改需要的属性;
- 添加资源:资源图放到更目录文件res里面;
- 资源视图里面添加资源,点击导入;
- 资源ID好一次填写到icons[0] = AfxGetApp()->LoadIconW(IDI_ICON1);
- 类视图中点击,初始化程序中添加代码
- //树控件
- //设置图标
- //准备HIcon的图标
- HICON icons[4];
- icons[0] = AfxGetApp()->LoadIconW(IDI_ICON1);
- icons[1] = AfxGetApp()->LoadIconW(IDI_ICON2);
- icons[2] = AfxGetApp()->LoadIconW(IDI_ICON3);
- icons[3] = AfxGetApp()->LoadIconW(IDI_ICON4);
- //CImageList list;//必须保存这个集合,写到.h中的成员的属性
- //创建图片
- list.Create(30,30, ILC_COLOR32,4,4);
- //添加具体的图片
- for (int i=0;i<4;i++)
- {
- list.Add(icons[i]);
- }
- m_tree.SetImageList(&list, TVSIL_NORMAL);
- //设置节点
- HTREEITEM root=m_tree.InsertItem(TEXT("根节点"),0,0,NULL);
- HTREEITEM