手写简单的MFC框架,分析MFC的运行流程

今天主要对着杨力翔老师的视频教程,仔细学习了MFC的处理流程。

以下是自己写的代码,分析了MFC的流程,这个比较简单每个人都可以实现。


注意事项:

①我用的是vs2010,新建一个win32应用程序。

②在项目/属性/配置属性/常规/MFC的使用选择 在共享DLL中使用MFC。


//Hello.h
class CMyApp : public CWinApp
{
public:
	virtual BOOL InitInstance();
};

class CMainWindow : public CFrameWnd
{
public:
	CMainWindow();
	
protected:
	
	afx_msg void OnPaint();
	DECLARE_MESSAGE_MAP()
};

//Hello.cpp
#include <afxwin.h>
#include "Hello.h"

CMyApp myApp;

BOOL CMyApp::InitInstance()
{
	m_pMainWnd = new CMainWindow();
	m_pMainWnd->ShowWindow(m_nCmdShow);
	m_pMainWnd->UpdateWindow();

	return TRUE;
}

BEGIN_MESSAGE_MAP(CMainWindow,CFrameWnd)
	ON_WM_PAINT()
END_MESSAGE_MAP()

CMainWindow::CMainWindow()
{
	Create(NULL,_T("L"));
}

void CMainWindow::OnPaint()
{
	CRect rect;
	GetClientRect(&rect);

	CPaintDC dc(this);
	CFont font;
	font.CreatePointFont(300,_T("宋体"));
	dc.SelectObject(&font);
	dc.DrawText(_T("I Love Asuna"),-1,&rect,DT_CENTER | DT_SINGLELINE | DT_VCENTER);

}

以下将按照win32 api编程的消息流程来梳理一下MFC:


①程序首先进入全局对象,CMyApp myApp,调用构造函数初始化对象。

②然后程序进入AfxWinMain函数,次函数是编辑器自己加载的。pApp指向当前当前创建的对象也就是myApp,AfxGetApp()作用就是获得当前对象。AfxWinInit初始化一些参数:主要有myApp中的m_hInstance,m_hPrevInstance,m_lpCmdLine,m_nCmdShow.

③调用当前对象的InitApplication,由于InitApplication是虚函数,并且我们没有改写它,所以调用的是CWinApp::InitApplication。主要是Document   Template。

④然后进入InitInstance,我们改写之后调用的是CMyApp::InitInstance.进入InitInstance函数内部,我们在堆里面创建一个CMainWindow的对象。

⑤创建CMainWindow对象我们要调用CMainWindow( )这个构造函数。

⑥进入构造函数Create用来注册窗口类和创建窗口。

⑦然后接着ShowWindow显示窗口。

⑧UpdateWindow更新窗口。返回值然后退出构造函数

⑨接着进入Run,Run是用来驱动消息循环的。也就是获得消息,然后分配转发消息。

⑩通过message map中的消息宏找到对应的消息处理函数。

⑪然后进入消息处理函数,这里我们一般重写该函数,如果不重写就往祖先里寻找该函数。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值