dtcms文档 微信公众号开发 阿里巴巴 北斗系统 Flutter VMware Java中高进阶架构 express boost ldap drupal7 bower vue过滤器 vuejs 教程 广告投放系统源码 mac虚拟打印机 linux自动获取ip arraylist删除指定元素 html下拉框默认选中 matlab不等于怎么表示 SketchUp python加法 python学习网站 java编程入门 java泛型 java在线课程 java时间格式化 javaenum java字符 js格式化时间 矩阵分析与应用 3389扫描器 HTML5从入门到精通 js日期格式化 显示器面板类型 tableau下载 微信小程序源代码 t470拆机 奥法隐藏外观 pro换肤
当前位置: 首页 > 学习教程  > 编程语言

mfc 学习的第二天

2021/1/13 20:24:17 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

mfc 学习的第二天 MFC 入门 1.1 MFC是什么 微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C类的形式封装了Windows API,并且包含一个…

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"));
}

本文链接: http://www.dtmao.cc/news_show_600304.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?