`
wo_deqing
  • 浏览: 60441 次
文章分类
社区版块
存档分类
最新评论

WinMain函数

 
阅读更多

现在讨论MFC应用程序如何启动。

WinMain函数是MFC提供的应用程序入口。进入WinMain前,全局应用程序对象已经生成。WinMain流程如图5-3所示。图中,灰色框是对被调用的虚拟函数的注释,程序员可以或必须覆盖它以实现MFC要求的或用户希望的功能;大括号所包含的图示是相应函数流程的细化,有应用程序对象App的初始化、Run函数的实现、PumpMessage的流程,等等。

WinMain函数

从图中可以看出:

(1)一些虚拟函数被调用的时机

对应用程序类(线程类)的InitIntance、ExitInstance、Run、ProcessMessageFilter、OnIdle、PreTranslateMessage来说,InitInstance在应用程序初始化时调用,ExitInstance在程序退出时调用,Run在程序初始化之后调用导致程序进入消息循环,ProcessMessageFilter、OnIdle、PreTranslateMessage在消息循环时被调用,分别用来过滤消息、进行Idle处理、让窗口预处理消息。

(2)应用程序对象的角色

首先,应用程序对象的成员函数InitInstance被WinMain调用。对程序员来说,它就是程序的入口点(真正的入口点是WinMain,但MFC向程序员隐藏了WinMain的存在)。由于MFC没有提供InitInstance的缺省实现,用户必须自己实现它。稍后将讨论该函数的实现。

其次,通过应用程序对象的Run函数,程序进入消息循环。实际上,消息循环的实现是通过CWinThread::Run来实现的,图中所示的是CWinThread::Run的实现,因为CWinApp没有覆盖Run的实现,程序员的应用程序类一般也不用覆盖该函数。

(3)Run所实现的消息循环

它调用PumpMessage来实现消息循环,如果没消息,则进行空闲(Idle)处理。如果是WM_QUIT消息,则调用ExitInstance后退出消息循环。

(4)CWinThread::PumpMessage

该函数在MFC函数文档里没有描述,但是MFC建议用户使用。它实现获取消息,转换(Translate)消息,发送消息的消息循环。在转换消息之前,调用虚拟函数PreTranslateMessage对消息进行预处理,该函数得到消息目的窗口对象之后,使用CWnd的WalkPreTranslateTree让目的窗口及其所有父窗口得到一个预处理当前消息的机会。关于消息预处理,见消息映射的有关章节。如果是WM_QUIT消息,PumpMessage返回FALSE;否则返回TRUE。

分享到:
评论

相关推荐

    用VC++编写的WinMain函数

    inMain在MFC程序中是如何从源程序中被隐藏的,theApp全局变量是如何被分配的,MFC框架中的几个类的作用与相互关系,MFC框架窗口是如何产生和销毁的,对窗口类的PreCreateWidow和OnCreate两个函数的着重分析,Windows...

    VC++中的WinMain函数

    主要针对vc++课程中的WinMain函数进行了举例说明,并给出了相应的实现代码。

    winmain函数的用法

    vc中的winmain函数的用法与理解 int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // command line int ...

    自己写的带有菜单的WinMain函数

    自己写的带有菜单的WinMain函。代码清晰,简单。知识单一。

    MFC中WinMain函数的写法

    WinMain函数的输入,窗口的设计,建立,注册,显示以及更新等等

    用API编写简单的Windows程序

    (2) WinMain函数的使用(Win32下程序的入口) (3) 完成Windows窗口产生的四个步骤: A.设计窗口类,即WNDCLASS结构体的填充, 其中注意窗口 函数的指定和类名的命名 B.注册窗口类,即RegisterClass(…) 函数的使用 C....

    MFC程序中的WinMain函数.pdf

    11

    MFC程序中的WinMain函数.docx

    11

    SDK模拟MFC隐藏WinMain,CWinApp,CDialog

    程序中隐藏WinMain函数,当成是头文件包含进来,我们开发就不需要改动WinMain函数, CWinApp 和CDialog类在SDK中模拟实现,程序会进入我写的InitInstance,该函数里面负责显示窗口,窗口类里面有窗口过程...

    入口函数( main、WinMain)

    入口函数( main、WinMain) 在C/C++中,我们知道有一个如下格式的函数: int main(int argc, _TCHAR* argv[]) { return 0; } 该函数是C/C++中的入口函数,而在WindowsAPI中也有自己的入口函数,该函数的格式...

    应用WinAPI函数修饰程序窗体实例

    应用WinAPI函数修饰程序窗体实例

    mfc视频笔记(三)

    WINMAIN函数是所有函数的入口函数。代码中虽没有winmain函数,但可以在编译器链接的时候将这个函数链接进去。 CTestApp theApp(应用程序对象)(全局对象,在winmain之前执行);为应用程序对象,每一个MFC程序只能...

    qt.rar_QT winma_qt main函数详解_qt winmain

    main和WinMain函数到底是怎么回事,以及QT是怎么创建窗口和消息循环的,我们已经非常清楚了

    MFC的程序框架剖析

    (1)对于Win32 SDK程序,应用程序的实例是由实例句柄(WinMain函数的hInstance参数)来标识的 (2)对于MFC程序,应用程序的实例是由全局对象(每一个MFC程序有且仅有一个从应用程序类CWinApp派生的类, 如CTestApp,它...

    WinMain.rar

    c++窗体程序设计必备winmain函数

    C++编写的边框,界面和一些简单功能

    有C++代码编写的界面,适于初学者研究。有关于Windows下的WinMain函数。 适于初学者研究。有关于Windows下的WinMain函数。

    VS2010用Win32开发新手模板

    本人根据教程编写的Win32项目模板,把winproc函数分解成多个函数,使用消息映射的方法来处理消息(具体操作请模仿我... WinMain函数写在头文件里了。在源文件里的BuildProc()函数和BuileEvent()函数是这个模板的关键。

    MFC程序执行过程剖析.docx

    我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序窗口的消息调用程序的窗口函数。而在MFC程序当中我们不再能找到...

    1WinMain-mouse.rar_mouse

    VC++ winmain函数使用调用方法,和hook类似

    vc++技術內幕第四版(源碼)

     Windows程序中必须要有WinMain函数,因为该函数最重要的任务是创建该应用程序的主窗口。Windows程序与基于MS-DOS程序的最大差别就在于:MS-DOS程序是通过调用操作系统的功能来获得用户输入的,而Windows程序是通过...

Global site tag (gtag.js) - Google Analytics