入口点函数简述

入口点函数简述

以基于MFC多文档Unicode应用程序为例:

系统调用运行期启动函数wWinMainCRTStartup()后,初始化C/C++函数库,构造全局C++对象,静态C++对象。

然后,进入主函数_tWinMain().主函数调用全局函数AfxWinMain().

_tWinMain((HINSTANCE hInstance, HINSTANCE hPrevInstance,

LPTSTR lpCmdLine, int nCmdShow){

return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);

}

//AfxWinMain()梗概

int AFXAPI AfxWinMain()

{

   int nReturnCode = -1;

   //取得当前线程地址

CWinThread* pThread = AfxGetThread();

//取得CMyApp对象指针

CWinApp* pApp = AfxGetApp();

//主要用于初始化MFC

AfxWinInit(hInstance,hPrevInstance,lpCmdLine,nCmdShow);

//等价于CMyApp::InitApplication(),MFC用于内部管理

pApp->InitApplication();

//等价于CMyApp::InitInstance

pApp->InitInstance();

nReturnCode = pThread->Run();

AfxWinTerm();

Return nReturnCode;

}

关于pApp->InitInstance():

BOOl CMyApp::InitInstance()

{

//允许应用程序作为控件容器使用,即在程序可以使用ActiveX控件

AfxEnableControlContainer();

//将应用程序的设置保存在注册表中,而非.Ini文件

SetRegistryKey(_T("Local AppWizard-Generated Applications"));

//加载最近使用的文件及最后浏览的状态

LoadStdProfileSettings();  

CMultiDocTemplate* pDocTemplate;

//初始化文档模板,RUNTIME_CLASS用于支持RTTI,以后详述

//MFC中的Document/View文档视图架构,就是传说中MVC(Module View Controller,模型视图控制器)架构

//关联文档,框架(控制器),视图

pDocTemplate = new CMultiDocTemplate(

IDR_RESEARTYPE,

RUNTIME_CLASS(CMycDoc),

RUNTIME_CLASS(CChildFrame),     RUNTIME_CLASS(CMyView));

AddDocTemplate(pDocTemplate);

CMainFrame* pMainFrame = new CMainFrame;

if (!pMainFrame->LoadFrame(IDR_MAINFRAME))

return FALSE;

m_pMainWnd = pMainFrame;

CCommandLineInfo cmdInfo;

ParseCommandLine(cmdInfo);

if (!ProcessShellCommand(cmdInfo))

return FALSE;

pMainFrame->ShowWindow(m_nCmdShow);

pMainFrame->UpdateWindow();

return TRUE;

}

关于LoadFrame():

BOOL CMDIFrameWnd::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle,

CWnd* pParentWnd, CCreateContext* pContext)

{

//产生主窗口(并没有显示),加载菜单等元素

if (!CFrameWnd::LoadFrame(nIDResource, dwDefaultStyle,

  pParentWnd, pContext))

return FALSE;

m_hMenuDefault = ::GetMenu(m_hWnd);

return TRUE;

}

LoadFrame()内部调用Create(),Create()调用CreateEX(),该函数触发WM_CREATE消息

在CMainFrame头文件MainFrame.h存在消息函数

afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

的声明。当然在MainFrame.cpp中也存在消息映射

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)

//{{AFX_MSG_MAP(CMainFrame)

ON_WM_CREATE()

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

于是,最终会调用OnCreate(),在此函数中加载工具栏,状态栏

然后返回至InitInstance(),显示更新窗口。

从InitInstance()返回至AfxWinMain(),执行pThread->Run()。

进入消息循环,消息经由消息路由机制,在各层消息映射表(Message Map)中寻找对应的消息处理函数。

Run()以后详述。

AfxWinTerm():作用不太清楚,应该与AfxWinInit()相对,释放MFC环境


福利链接

如何使用Chrome插件,免费上谷歌,谷歌学术,点击打开链接

真男人不能说不行:使用插件,全面提升Chrome的颜值,逼格,易用性,福利,开车技能点击打开链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值