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

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。

分享到:
评论

相关推荐

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

    在Windows编程中,WinMain函数是程序的入口点,它替代了C/C++中的main函数。这个标题"自己写的带有菜单的WinMain函数"表明我们要讨论的是如何在WIN32应用程序中创建一个具有用户界面(UI)的程序,具体来说,就是...

    VC++中的WinMain函数

    在VC++编程环境中,WinMain函数是Windows应用程序的入口点,与C++标准库中的main函数有所不同。在创建Windows桌面应用程序时,我们通常会用到WinMain而不是main,因为它是Windows API的核心部分,用于初始化窗口类、...

    MFC程序中的WinMain函数.pdf

    标题中的"MFC程序中的WinMain函数"指的是在MFC应用程序中,WinMain函数是如何被使用的。通常,WinMain函数是Win32 API应用程序的起点,负责初始化和运行程序的主要逻辑。然而,在MFC中,这个功能被隐藏在MFC框架内部...

    用VC++编写的WinMain函数

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

    MFC程序中的WinMain函数.docx

    在MFC程序中,WinMain函数虽然在代码中并不直接可见,但它仍然是程序的入口点,就像所有Win32程序一样。MFC(Microsoft Foundation Classes)库为了简化开发者的工作,将WinMain函数以及其他与窗口创建和消息处理...

    winmain函数的用法

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

    MFC中WinMain函数的写法

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

    SDK模拟MFC隐藏WinMain,CWinApp,CDialog

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

    WinMain

    1. **WinMain函数的定义** `WinMain`函数的基本结构如下: ```cpp int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow); ``` 这里,`hInstance`表示当前执行...

    WinMain程序

    在Windows操作系统中,WinMain函数是应用程序的入口点,它在C++编程中扮演着重要的角色,尤其是在开发基于Windows的应用程序时。这个函数是Windows API(应用程序接口)的一部分,替代了传统的C运行库中的main函数。...

    入口函数( main、WinMain)

    在`WinMain`函数中,可以使用`MessageBox`函数来展示简单的对话框,例如: ```cpp MessageBox(NULL, "内容", "标题", MB_OK); ``` `MessageBox`函数接受四个参数,用于设置对话框的属性,如父窗口句柄、显示文本、...

    用Windows_C_编写一个记事本程序

    * Windows 应用程序的基本结构包括入口函数 WinMain 和窗口函数。 二、WinMain 函数 * WinMain 函数是所有 Windows C 程序的入口,类似于 DOS C 中的 main 函数。 * WinMain 函数的功能是完成一系列的定义和初始化...

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

    本实例主要探讨如何使用WinAPI函数来修饰和自定义程序的窗体,从而实现更丰富的用户界面和更高级的功能。API 专区类标签表明这是一个专注于Windows API应用的实践案例。 在Windows程序设计中,Visual Basic 6 (VB6)...

    c++游戏 规范编程(主要为代码)

    ### WinMain函数:C++源代码游戏编程 #### 一、WinMain函数简介 在Windows平台上的应用程序开发中,`WinMain`函数是一个非常重要的组成部分。它作为应用程序的入口点,负责初始化应用程序资源、处理窗口消息以及...

    mfc视频笔记(三)

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

    WinMain简单窗口实现函数

    在Windows编程中,`WinMain`函数是应用程序的入口点,尤其在开发基于Windows操作系统的桌面应用程序时。这个函数替代了通常在其他操作系统或库中常见的`main`函数。`WinMain`函数提供了与Windows消息循环和窗口过程...

    vc++Windows程序设计参考.pdf

    Windows程序通常从WinMain函数开始执行,这是程序的入口点,类似于C语言中的main()函数。WinMain函数在WINBASE.H头文件中定义,其参数包括程序实例句柄、前一个实例句柄(在现代Windows系统中通常为NULL)、命令行...

    MFC中的消息循环和窗口函数

    在WinMain函数中,消息循环的代码如下所示: while(GetMessage(&msg, ...)) { TranslateMessage(&msg); DispatchMessage(&msg); } 在上面的代码中,GetMessage函数用于从操作系统中获取消息,并将其存储在msg...

    VC++MFC编程实例PPT学习教案.pptx

    3. WinMain函数:WinMain函数是MFC程序的入口函数,负责初始化MFC环境和创建应用程序对象。 4. AfxWinMain函数:AfxWinMain函数是MFC的入口函数,负责初始化MFC环境和创建应用程序对象。 5. CWinApp类:CWinApp类是...

Global site tag (gtag.js) - Google Analytics