MFC中的InitInstance()函数应该怎样理解

 我来答
童言dV
2019-02-28 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.4万
采纳率:30%
帮助的人:710万
展开全部
MFC
中InitInstance()是应用初始化函数。
1.函数原型:
CWinApp::InitInstance
virtual
BOOL
InitInstance(
);
2.返回值:
如果初始化成功,则返回非零值;否则返回0。
InitInstance函数的返回值为BOOL类型,所谓的BOOL(布尔)类型,在C语言中就是int,它实际就是一个宏定义:
typedef
int
BOOL
通常我们使用BOOL类型来决定“是”以及“否”,“是”就是TRUE,“否”就是FALSE。TRUE和FALSE的值就是1和0,它们也是通过宏来直接定义的常量。
3.深入理解:
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函数进入消息循环。
夔春风鸟
2019-12-05 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:25%
帮助的人:812万
展开全部
哈,小伙子精神不错啊...
是这样的.....
mfc的基于于对话框的应用程序与文档的应用程序用的不是同一个run.
你上面的理解是文档类型的.
到于对话框,请看ctestapp::initinstance()中的代码,其中有以下几句:
ctestdlg
dlg;
m_pmainwnd
=
&dlg;
int
nresponse
=
dlg.domodal();
大致是这样吧.这个domodal内部有为模态对话框重建一个消息循环,模态对话框用得就是这样消息循环.你可以去百度下大牛们对模态对话框消息循环的分析.
当对话框退出的时候,initintance总是会返回false,而这在winmain里的有大致这样的代码:
if(!initinstance())//函数不是这样直接写,但最终是调用这个函数
{
xxxxxxxxxx
goto
failture;
}
这个goto语句直接会将cwinapp::run直接跳过.从而直接结束winmain.
明白?给点分吧,打字不容易啊,兄弟
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式