MFC框架程序

来源:互联网 发布:网络危机公关处理案例 编辑:程序博客网 时间:2024/05/22 00:43

     在普通MFC程序中是没有WinMain函数的,它由编译器在程序编译是再连接进来,可以在Program Files/Microsoft Visual Studio/VC98/MFC/SRC中找到它的定义文件APPModul.cpp找到_tWinMain函数.、_tWinMain 实际上是一个宏  #define _tWinMain WinMain.接着视频讲解了MFC程序的执行顺序.其实也是按照设计窗口类--->注册窗口类---->创建窗口---->显示窗口---->更新窗口---->消息循环这个线索来的.具体的顺序如下:

产生全局对象(CTestApp theApp) //应用程序全局对象的构造和内存分配
WinMain()->//进入主函数
AfxWinMain()->//调用API
InitAplacation()(应用程序的内部管理)->//用于应用程序的内部管理的初始化
Initinstance()(theApp)->//初始化应用程序对象
应用程序的Initinstance()->//应用程序的初始化(创建和注册窗口类、显示和更新应用程序框架)
注册窗口类->
AfxEndDeferRegisterClass ()(该函数根据不同的应用程序注册不同的窗口类)->
AfxRegisterClass()->
CMainFrame::PreCreateWindow()->
CFrameWnd::PreCreateWindow()->
AfxDeferRegisterClass()(如果没有注册,就注册窗口类;它实际上是AfxEndRegisterClass()的宏)(一般都是在这里注册窗口类,由于文档窗口涉及到文档视图类的管理)->
LoadFrame()->//载入框架
CFrameWnd::Create()->/
CWnd::CreateEx()->//创建应用程序窗口
CMainFrame::PreCreateWindow()(实际上该函数是一个虚函数,也就是说如果子类为应用程序定义了该函数,那么它将调用子类的函数,因此,我们可以重载该函数来修改应用程序框架的外观)->//在框架窗口显示之前调用
ShowWindow()->UpdateWindow()->//显示和更新

   消息循环:->
    CwinThread::Run()->
do-while()循环(->PumpMessage()->GetMessage()->TranslateMessage()->DispatchMessage())
简单的说就是初始化全局对象进入主函数再进行窗口类的创建和注册并显示,然后进入消息循环。
theApp:全局变量或是类对象在程序运行前初始化。即分配内存空间,初始成员。(每一个MFC应用程序都只有一个全局对象theApp对象,我们用该全局对象唯一的表示该应用程序。)


   窗口对象和程序对象不是一回事,窗口销毁了程序不一定就销毁了,程序销毁了,窗口就一定销毁了,和程序析构函数有关窗口与程序相联系的纽带是窗口句柄 HWND hwnd;也就是说,窗口销毁了,CMainFrame、CView 仍然存活,其内成员函数依然可以调用.

 

原创粉丝点击