MFC的运行过程分析

MFC程序的运行细节剖析

       MFC程序也是Windows程序,所以它应该也有一个WinMain,但是在程序中看不到它的踪影。其实在程序进入点之前,还有一个(而且仅有一个)全局对象(theApp),这就是所谓的Application object,当操作系统将程序加载并激活时,这个全局对象获得配置,其构造函数会先执行,比WinMain更早。

一 CWinApp取代WinMain

       CWinApp的派生对象被称为application object,可以想见,CWinApp本身就代表一个程序本体。所谓程序本体是与程序本身有关而不与窗口有关的数据或动作。CWinApp类定义如下:

class CWinApp : public CWinThread

{

    //startup args

    HINSTANCE m_hInstance;

    HINSTANCE m_hPrevInstance;

    LPTSTR m_lpCmdLine;

    int m_nCmdShow;

 

//Runing args

CWnd* m_pMainWnd;

CWnd* m_pActiveWnd;

    LPCTSTR m_pszAppName;

    LPCTSTR m_pszRegistryKey;

   

public:

    LPCTSTR m_pszExeName;       //executable name

    LPCTSTR m_pszHelpFilePath;  //default based on module path

    LPCTSTR m_pszProfileName;   //default based on app name

 

public:

    virtual BOOL InitApplication();

 

    //overrides for implementation

    virtual BOOL InitInstance();

    virtual int ExitInstance();

    virtual int Run();

    virtual BOOL OnIdle(LONG lCount);

};

       传统意义上SDK程序的WinMain所完成的工作现在由CWinApp的三个函数完成:

virtual BOOL InitApplication();

       virtual BOOL InitInstance();

       virtual int Run();

那么WndProc函数到哪里去了呢?CFrameWnd主要用来掌握一个窗口,你几乎可以说它是用来取代SDK程序中的窗口函数的地位。MFC通过内建了一个所谓的Message Map机制,会把消息自动送到“与消息对应的特定函数”中去。有关Message Map实现机制请看另外一篇博客。

二 程序运行过程分析

       如图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值