MFC快速入门
一、什么是MFC?
MFC(Microsoft Foundation Classes)是微软基础类库的简称,本质就是微软公司使用C++把windows api进行二次封装,加快win32的应用程序的开发速度
二、基于对话框的MFC程序
下面开始基于对话框写一个最简单的MFC程序,他包含一个按钮,点击按钮提示Helloworld,他有2个文件一个是CPP和一个资源文件
创建cpp文件
//下面是最简单的MFC对话框的demo
//MfcDemoApp.cpp
#include <afxwin.h> //标准MFC头文件,MFC项目必须导入该文件
#include "resource.h" //如果有资源文件就必须导入该资源文件的头文件
//在对话框MFC项目中必须有2个Class 一个是继承CDialog或者别的样式模板框架 一个是固定继承Cwinapp类
class CMyDlg :public CDialog {
public:
//这里IDD_DIALOG1为对话框的ID,在资源文件里面可以看出创建对话框的ID,详细的下面有说明
enum { IDD = IDD_DIALOG1};
CMyDlg():CDialog(IDD) {}
//声明消息映射,必须在类声明中,对应BEGIN_MESSAGE_MAP和END_MESSAGE_MAP
DECLARE_MESSAGE_MAP()
//对话框里按钮的点击事件声明,afx_msg写不写多不影响程序的运行,但是我们一般对于MFC的消息映射多会加一个afx_msg
afx_msg void OnBnClickedButton1();
};
//当前模板里所有控件的事件
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
//ON_BN_CLICKED是点击宏,第一个参数是控件的ID,第二个参数是点击事件方法的地址,宏还有好多种,在使用的时候可以查看文档
ON_BN_CLICKED(IDC_BUTTON1, &CMyDlg::OnBnClickedButton1)
END_MESSAGE_MAP()
void CMyDlg::OnBnClickedButton1()
{
//这里是点击按钮的实现,我们还是helloworld
AfxMessageBox("HELLOWORLD");
}
//mfc中CWINAPP可以看做一个线程,他管理这一个或者多个窗口的创建和销毁
class MfcDemoApp :public CWinApp
{
public:
//MFC的Main方法就是InitInstance,所以只需要重定义InitInstance就可以完成最简单的MFC,下面是代码
virtual BOOL InitInstance();
};
BOOL MfcDemoApp::InitInstance()
{
//申明一个对话框变量,然后把变量赋值给MfcDemoApp的m_pMainWnd,最后在调用DoModal进行实体化对话框,这里DoMadal里面就一个死循环,如果他退出死循环有返回值了,代表当前线程结束,如果这个线程是唯一的主线程,那么整个进程就会退出
CMyDlg dlg;
this->m_pMainWnd = &dlg;
dlg.DoModal();
return FALSE;
}
MfcDemoApp app;
创建资源文件
1.右键项目添加一个资源文件,然后右击资源文件在新建一个窗口资源,然后删除默认给的二个按钮,在从工具栏里拉1个按钮出来,如下图
三、常用控件编程
1.静态文本 Static Text
设置内容
//注意:静态文本控件ID不能已STATIC为结尾,不然无法使用类向导给控件添加变量
控件变量.SetWindowText("设置的内容");
获取内容
//注意:静态文本控件ID不能已STATIC为结尾,不然无法使用类向导给控件添加变量
CString str;
控件变量.GetWindowText(str);
AfxMessageBox(str);
2.编辑框 EditControl
获取内容
CString str;
编辑框变量.GetWindowText(str);
AfxMessageBox(str);
设置内容
编辑框变量.SetWindowText("设置的内容")
3.静态图片 Picture Control
设置图片
//使用类向导给控件添加变量,注意控件ID不能已STATIC为结尾
//宽高按空间大小设置
CRect rect;
图片变量.GetWindowRect(rect);
HBITMAP hbitmap = (HBITMAP)LoadImage(
AfxGetInstanceHandle(),//处理包含被装载图像模块的实例
"D:\\1.bmp", //图片路径
IMAGE_BITMAP, //IMAGE_BITMAP为位图 IMAGE_ICON为图标 IMAGE_CURSOR为光标
rect.Width(),
rect.Height(),
LR_LOADFROMFILE | LR_CREATEDIBSECTION //使用路径加载图片就固定使用该参数
);
图片变量.SetBitmap(hbitmap);
3.下拉框 Combo Box
下拉框添加元素
下拉框变量.AddString("添加参数");
设置下拉框默认选项
下拉框变量.SetCurSel(0);
下拉框插入选项
下拉框变量.InsertString(1, "插入参数");
下拉框删除选项
下拉框变量.DeleteString(下拉框索引参数);
获取下拉框索引对应的值
CString str;
下拉框变量.GetLBText(下拉框索引参数, str);
AfxMessageBox(str);
下拉框选项改变事件
void CMFCApplication2Dlg::OnSelchangeCombo1()
{
//获取当前索引
int index = 下拉框变量.GetCurSel();
//获取值
CString str;
下拉框变量.GetLBText(index, str);
MessageBox(str);
}
4.列表控件 List Control
添加表头
//设置属性 整行选中 网格显示
列表控件变量.SetExtendedStyle(列表控件变量.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
//控件属性view设置为报表模式Report
列表控件变量.InsertColumn(0,"姓名",LVCFMT_LEFT,100);
列表控件变量.InsertColumn(0, "性别", LVCFMT_LEFT, 100);
列表控件变量.InsertColumn(0, "年龄", LVCFMT_LEFT, 100);
插入一行
列表控件变量.InsertItem(该插入行数索引,"插入内容");
删除一行
列表控件变量.DeleteItem(行数索引);
修改单元格数据
列表控件变量.SetItemText(行数, 列数, "修改内容");
总结
MFC还有好多控件和事件没有总结出来,我们在开发的时候,可以点击Visal Studio菜单栏的帮助下的查看帮助按钮,查看MFC文档,
或者打开下面的链接进行学习
> https://docs.microsoft.com/zh-cn/cpp/mfc/mfc-desktop-applications?view=msvc-170