mfc 学习的第二天

mfc 学习的第二天

MFC 入门

1.1 MFC是什么
微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
MFC把Windows SDK API 函数包装成了几百个类,MFC给Windows操作系统提供了面向对象的接口,支持可重用性、自包含性以及其他OPP原则。MFC通过编写类来封装窗口、对话框以及其他对象,引入某些关键的虚函数(覆盖这些虚函数可以改变派生类的功能)来完成,并且MFC设计者使类库带来的总开销降到了最低。

1.2 编写第一个MFC应用程序
1、代码的编写
项目的创建和之前一样,只是此次的源文件后缀为.cpp,因为MFC是由C++编写的,编写MFC程序需要包含#include<afxwin.h>头文件。

mfc.h:
	#include<afxwin.h> //mfc头文件

	//应用程序类CWinApp,派生类(子类)
	class MyApp:public CWinApp
	{
	public:
		//基类的虚函数,派生类只是重写
		//MFC程序的入口地址
		virtual BOOL InitInstance();
	};

	//框架类 CFrameWnd,派生类(子类)
	class MyFrame:public CFrameWnd
	{
	public:
		MyFrame(); //构造函数
	};
mfc.cpp:
	#include "mfc.h" //对应类声明的头文件

	MyApp app; //有且只有一个全局的应用程序类对象

	BOOL MyApp::InitInstance() //程序入口地址
	{
	MyFrame *frame = new MyFrame; //1、创建框架类对象

	frame->ShowWindow(SW_SHOWNORMAL); //2、显示窗口
	frame->UpdateWindow(); //3、 更新窗口

	m_pMainWnd = frame; //4、 保存框架类对象指针

	return TRUE; //初始化正常则返回TRUE
	};

	MyFrame::MyFrame()
	{
	Create(NULL,TEXT("mfc")); //创建窗口
	}
2、程序执行流程
	1、程序开始时,先实例化应用程序对象(有且只有一个)
	2、执行程序的入口函数InitInstance
	3、给框架类MyFrame对象动态分配空间(自动调用它的构造函数),在其构造函数内部,通过CWnd::Create创建窗口
	4、框架类对象显示窗口CWnd::ShowWindow
	5、框架类对象更新窗口CWnd::UpdateWindow
	6、保存框架类对象指针CWindTread::m_pMainWnd

3、代码分析
	1、CFrameWnd框架窗口类
	CFrameWnd是从CWnd(窗口基类)派生出来的。CFrameWnd模仿框架窗口行为,我们可以把框架窗口作为顶层窗口看待。它是应用程序与外部世界的主要接口。

	如果想要创建一个窗口,可以在此类中调用CWnd::Create或CWnd::CreateEX函数:
 		virtual BOOL Create(
             LPCTSTR lpszClassName,
             LPCTSTR lpszWindowName,
             DWORD dwStyle,
             const RECT& rect,
             CWnd* pParentWnd,
             UINT nID,
             CCreateContext* pContext = NULL
             );	
     Create接收的8个参数后6个有默认值定义。
     lpszClassName指定了窗口基于WNDCLASS类的名称,为此将其设定为NULL将创建一个基于已注册的WNDCLASS类的默认框架窗口
     lpszWindowName参数指定将在窗口的标题栏出现的文字。


     2、CWinApp应用程序类

     MFC应用程序的核心就是基于CWinApp类的应用程序对象。CWinApp提供了消息循环来检索消息并将消息调度给应用程序窗口。它还包括可被覆盖的、用来自定义应用程序行为的主要虚函数。

     一个MFC程序有且仅有一个应用程序对象,此对象必须声明为在全局范围内有效,以便它在程序开始时即在内存中被实例化。 

     3、InitInstance函数

     CWinApp::InitInstance函数是一个虚函数,其默认操作仅有一条语句:
			BOOL MyApp::InitInstance() //程序入口地址
			{
				return TRUE; //返回正常初始化
			} 
	InitInstance的目的是给应用程序提供一个自身初始化的机会,其返回值决定了框架接下来要执行的内容,如果返回FALSE将关闭应用程序,如果初始化正常返回TRUE便允许程序继续进行。
	此函数是MFC应用程序的入口。	

	4、m_pMainWnd成员变量

	在CWinApp中有一个名为CWinThread::m_pMainWnd的成员变量。该变量是一个CWnd类型的指针,它保存了应用程序框架窗口对象的指针。也就是说,是指向CFrameWnd对象(框架窗口类对象)的指针。

vs2013创建mfc项目

步骤:文件→新建→项目→选择Win32项目,确定→下一步→勾上空项目,完成→源文件右键→添加→新建项→C++文件→名称为:mfc.cpp→添加→头文件右键→添加→新建项→头文件→名称为:mfc.h→添加

配置环境后,代码才可编译运行:
步骤:鼠标右击 mfc项目→属性→常规→MFC的使用→在共享DLL中使用MFC→确定

3 利用mfc创建窗口
3.1 mfc头文件afxwin.h
3.2 自定义类 继承于CWinApp 应用程序类
MyApp app应用程序对象,有且仅有一个
3.3 程序入口 InitInstance
3.4 入口里 创建窗口
3.5 窗口类MyFrame 继承于 CFrameWnd
3.6 MyFrame 构造中 Create(NULL,标题名称)
3.7 创建窗口对象
3.8 显示和更新
3.9 m_pMainWnd = frame; //保存指向应用程序的主窗口的指针
3.10 return TRUE
3.11 对项目进行配置 在共享DLL中使用MFC

小技巧:
解决中文注释下有红线的问题
点击番茄助手→Underlines→取消所有勾选→确定

mfc.h的源码

#include <afxwin.h>  //mfc头文件

class  MyApp:public CWinApp //继承CWinApp应用程序类
{
public:
	//程序入口 
	virtual BOOL InitInstance();
};  

class MyFrame:public CFrameWnd //继承窗口框架类
{
public:
	MyFrame();

};

mfc.cpp的源码

#include "mfc.h"


MyApp app;  //全局应用程序对象,有且仅有一个

BOOL MyApp::InitInstance()
{
	//创建窗口
	MyFrame * frame = new MyFrame;

	//显示和更新
	frame->ShowWindow(SW_SHOWNORMAL);
	frame->UpdateWindow();

	m_pMainWnd = frame;  //保存指向应用程序的主窗口的指针 

	return TRUE; //返回正常初始化
} 

MyFrame::MyFrame()
{
	Create(NULL, TEXT("mfc"));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shark_xk88

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值