MFC应用程序的启动过程与传统的Win32程序类似,都需要一个程序入口函数来引导程序的运行。在这个过程中,CWinApp类扮演了关键角色。CWinApp是MFC框架中的核心应用程序类,它封装了应用程序的基本信息,并负责初始化任务和消息循环的管理。当你创建一个MFC应用程序时,CWinApp的构造函数会在程序启动时被自动调用,它会将自身实例的地址存储在MFC库中的全局变量中,同时初始化类的成员变量。
CWinApp的构造函数主要包括以下几个步骤:
1. **全局变量关联**:构造函数将CWinApp对象的地址保存到MFC库中的特定位置,这样在整个应用程序生命周期中,这个类的实例可以被其他部分的代码引用和访问。
2. **成员变量初始化**:构造函数负责初始化CWinApp的内部成员变量,确保它们在应用程序启动时处于正确状态。这些变量可能包含应用程序设置、窗口句柄、事件处理等信息。
关于Windows应用程序的类型,主要有四种:
- **控制台程序**(Console):如C++的`main`函数,没有图形界面,通过Windows DOS窗口执行。
- **窗口程序**:拥有独立的窗口,可以与用户交互,如`WinMain`作为入口函数,生成的EXE文件执行。
- **库程序**:
- **静态库**(DLL,如扩展名为LIB的文件):代码和数据不直接嵌入到执行文件,而是通过链接时提取。
- **动态库**(DLL,扩展名为DLL的文件):代码在编译时不在可执行文件中,而是在运行时动态加载。
三种应用程序的对比:
- **入口函数**:控制台程序用`main`,窗口程序用`WinMain`,动态库程序用`DllMain`,静态库程序通常无独立入口函数。
- **文件存在方式**:控制台和窗口程序为EXE,动态库为DLL,静态库为LIB。
- **执行方式**:控制台程序在DOS窗口中,窗口程序有自己的窗口,动态库由可执行程序调用,静态库代码嵌入到其他文件中。
在Windows编程中,Visual Studio C++是常用的开发环境,它包含了编译器、链接器和资源编译器。工具链如VC1.5到VC2010(10.0),提供了对不同版本的支持。Windows库(如kernel32.dll, user32.dll, gdi32.dll)和头文件(如Windows.h, winuser.h等)是实现Windows功能的核心。例如,Windows.h包含了Windows API的全部定义,而winuser.h专注于窗口和消息处理。
在编写MFC应用程序时,比如HelloWorld程序,你会使用Visual Studio的向导自动生成控制台程序、窗口程序、静态库程序和动态库程序的代码,这些都涉及到CWinApp类的使用以及Windows API的调用。从基础的入口函数到复杂的库程序集成,MFC的应用程序开发涉及了Windows编程的多个方面。