上一篇:MFC界面编程基础(01):Windows 编程模型 | 下一篇:MFC界面编程基础(03):消息映射、窗口绘制、文档/视图结构体系 |
---|
MFC是什么?
微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
MFC把Windows SDK API函数包装成了几百个类,MFC给Windows操作系统提供了面向对象的接口,支持可重用性、自包含性以及其他OPP原则。MFC通过编写类来封装窗口、对话框以及其他对象,引入某些关键的虚函数(覆盖这些虚函数可以改变派生类的功能)来完成,并且MFC设计者使类库带来的总开销降到了最低。
编写第一个MFC应用程序
两个重要的MFC类:
- CWinApp 应用程序类
- CFrameWnd 窗口框架类
CFrameWnd 框架窗口类
MFC的CWnd类以及其派生类为 窗口 或 应用程序创建的窗口 提供了面向对象的接口。CFrameWnd就是从CWnd派生出来的。CFrameWnd模仿框架窗口行为,我们可以把框架窗口作为顶层窗口看待,它是应用程序与外部世界的主要接口。
如果想要创建一个窗口,可以在此类中调用Create或CreateEX函数,并且在CWinApp::InitInstance中创建一个框架窗口对象,并通过ShowWindow函数将其显示出来。
CFrameWnd::Create原型如下:
Create接收的8个参数6个有默认值定义。我们只需要为函数的前两个参数指定值,剩下六个参数接收默认值。第一个参数lpszClassName指定了窗口基于WNDCLASS类的名称,为此将其设定为NULL将创建一个基于已注册的WNDCLASS类的默认框架窗口。lpszWindowName参数指定将在窗口的标题栏出现的文字。
CWinApp应用程序类
MFC应用程序的核心就是基于CWinApp类的应用程序对象。CWinApp提供了消息循环来检索消息并将消息调度给应用程序窗口。它还包括可被覆盖的、用来自定义应用程序行为的主要虚函数。一旦包含Afxwin.h,就可以将CWinApp以及其他MFC类引入应用程序中。一个MFC程序可以有且仅有一个应用程序对象,此对象必须声明为在全局范围内有效,以便它在程序开始时即在内存中被实例化。
- InitInstance函数
CWinApp::InitInstance函数是一个虚函数,其默认操作仅有一条语句:
return TRUE;
InitInstance的目的是给应用程序提供一个自身初始化的机会,其返回值决定了框架接下来要执行的内容,如果返回FALSE将关闭应用程序,如果初始化正常返回TRUE以便允许程序继续进行。此函数是MFC应用程序的入口。 - m_pMainWnd 成员变量
在 CWinApp 中有一个名为 m_pMainWnd 的成员变量。 该变量是一个 CWnd 类型的指针,它保存了应用程序框架窗口对象的指针。也就是说,是指向 CFramWnd 对象(框架窗口类对象)的指针。 - 程序代码实现
完整代码
// mfc.h
#pragma once
#include <afxwin.h>
//1)应用程序类 CWinApp, 派生类(子类)
class MyApp: public CWinApp
{
public:
//基类的虚函数
//派生类只是重写
//MFC程序的入口地址
virtual BOOL InitInstance();
};
//2)框架类 CFrameWnd, 派生类(子类)
class MyFrame: public CFrameWnd
{
public:
MyFrame();
//声明消息映射宏
DECLARE_MESSAGE_MAP()
afx_msg void OnLButtonDown(UINT, CPoint);
afx_msg void OnPaint();
private:
};
// mfc.cpp
#include "mfc.h"
//有且只有一个全局的应用程序类对象
MyApp myApp;
//程序的入口地址
BOOL MyApp::InitInstance()
{
/*
1、创建框架类对象
2、显示窗口
3、更新窗口
4、保存框架类对象指针
*/
//1、创建框架类对象
MyFrame *frame = new MyFrame; //构造函数
// 2、显示窗口
frame->ShowWindow(SW_SHOWNORMAL);
// 3、更新窗口
frame->UpdateWindow();
//4、保存框架类对象指针
m_pMainWnd = frame;
return TRUE;
}
//定义消息宏
BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)
ON_WM_LBUTTONDOWN()
ON_WM_PAINT()
END_MESSAGE_MAP()
MyFrame::MyFrame()
{
//CWnd类的成员函数 CWnd::Create
//CFrameWnd 继承于 CWnd
Create(NULL, TEXT("MFC"));
}
void MyFrame::OnLButtonDown(UINT, CPoint)
{
//CWnd::MessageBox
MessageBox(TEXT("鼠标左键"));
}
void MyFrame::OnPaint()
{
// QPainter p(this);
// p.drawxxxx();
CPaintDC cdc(this);
cdc.TextOutW(100, 100, TEXT("你好,mfc"));
}
上一篇:MFC界面编程基础(01):Windows 编程模型 | 下一篇:MFC界面编程基础(03):消息映射、窗口绘制、文档/视图结构体系 |
---|