请输入您要查询的百科知识:

 

词条 InitInstance
释义

CWinApp::InitInstance

virtual BOOL InitInstance( );

返回值

如果初始化成功,则返回非零值;否则返回0。

注释

Windows允许在同一时刻运行程序的几份拷贝。在概念上,应用程序的初始化可以被分为两个部分:一次性的应用程序初始化工作,这些在应用程序第一次运行时完成,以及实例的初始化工作,每次运行程序的一个拷贝时都会执行这些操作,包括第一次运行时。框架中WinMain实现调用这个函数。

重载InitInstance以初始化在Windows下运行的应用程序的每个新实例。通常,你重载InitInstance以构造主窗口对象并设置CWinThread::m_pMainWnd数据成员,使其指向这个窗口。有关重载这个成员函数的更多信息参见“Visual C++ 程序员指南”中的“ CWinApp:应用程序类”。

示例

// AppWizard 根据你选择的选项实现重载的InitInstance函数。

// 例如,对于下面由AppWizard创建的代码,选择了单文档界面(SDI)选项。

// 你可以在AppWizard创建的代码中加入其它的每个实例都执行的初始化代码。

BOOL CMyApp::InitInstance()

{

// 标准的初始化工作

// 如果你没有使用这些特性,并且希望减小最终可执行程序的大小,

// 你应当从下面的初始化例程中移去不必要的代码。

SetDialogBkColor(); // 将对话框的背景色设为灰色。

LoadStdProfileSettings(); // 载入标准的INI文件选项(包括MRU)

// 注册应用程序的文档模板。文档模板

// 被用作文档、框架窗口和视图之间的联系。

CSingleDocTemplate* pDocTemplate;

pDocTemplate = new CSingleDocTemplate(

IDR_MAINFRAME,

RUNTIME_CLASS(CMyDoc),

RUNTIME_CLASS(CMainFrame), // SDI的主框架窗口

RUNTIME_CLASS(CMyView));

AddDocTemplate(pDocTemplate);

// create a new (empty) document

OnFileNew();

if (m_lpCmdLine[0] != '\\0')

{

// 创建一个新(空的)文档

}

return TRUE;

}

学过PE文件格式,你就明白,程序在进入WinMain之前要做很多事情,比如初始Dos头,分配函数表,初始化全局变量。之后才进入程序入口(WinMain)

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函数进入消息循环。

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2024/12/23 15:31:41