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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值