InitInstance函数的
返回值为
BOOL类型,所谓的BOOL(布尔)类型,在C语言中就是int,它实际就是一个
宏定义:
通常我们使用BOOL类型来决定“是”以及“否”,“是”就是
TRUE,“否”就是FALSE。TRUE和FALSE的值就是1和0,它们也是通过宏来直接定义的常量。
Windows允许在同一时刻运行程序的几份拷贝。在概念上,应用程序的初始化可以被分为两个部分:一次性的应用程序初始化工作,这些在应用程序第一次运行时完成,以及实例的初始化工作,每次运行程序的一个拷贝时都会执行这些操作,包括第一次运行时。框架中
WinMain实现调用这个函数。
重载InitInstance以初始化在Windows下运行的应用程序的每个新实例。通常,你重载InitInstance以构造主
窗口对象并设置
CWinThread::m_pMainWnd数据成员,使其指向这个窗口。有关重载这个成员函数的更多信息参见“Visual C++ 程序员指南”中的“ CWinApp:应用程序类”。
MFC对WindowsAPI进行了封装。在用向导编译成的
二进制代码,MFC
编译器链接器把
源文件编译成PE文件格式存储在磁盘上。程序执行的时候,从PE
文件头开始执行,在进入
Winmain函数之前,进行一系列的必备的初始化。 MFC对这一系列的过程进行了封装。提供给编程人员的第一个裸露程序入口就是
CWinApp的InitInstance(),其实程序的入口依然是WinMain()函数。大家都知道,每个程序都有拥有一个进程,每个进程至少有一个
线程就是
主线程。
CWinThread类是MFC用来封装线程的,这个主线程就是在WinMain函数中创建的,包括UI线程和工作者线程。因此每个MFC程序至少使用一个
CWinThread派生类。被MFC程序员熟知的CWinApp应用类就从这里派生。
InitInstance是CWinThread的一个
虚函数,InitInstance就是“初始化实例”的意思,可见,它是在实例创建时首先被调用的。应用程序总要
重载这个虚函数,进行系统设置,创建运行环境。例如,主窗口一定要在InitInstance()中创建,因为该函数退出后就进入该线程的
消息循环。
MFC执行流程: _tWinMain(
WinMain的别名,用
define替换的)->AfxWinMain->初始化线程,调用InitInstance初始化窗口,调用
Run函数进入消息循环。