InitInstance函数
来源:互联网 发布:虚拟商城软件下载 编辑:程序博客网 时间:2024/04/30 03:57
BOOL InitInstance()为什么说它是程序的进入点?还有,那个WinMain函数又有什么作用,这两个函数之间有什么关系吗?
BOOL InitInstance()是MFC的CWinApp类的成员函数,而WinMain才是真正的入口点,但是MFC不允许程序中有WinMain这个函数,因为MFC自己编写了WinMain函数,如果程序中再定义就重复定义了,而MFC编写的的WinMain函数则调用了CWinApp::InitInstance函数,所以InitInstance看起来似乎就是MFC程序的入口点。
InitInstance是虚函数,继承类必须提供它的实现代码。完成整个消息链的启动。
在CWinApp这个类中除了有一般类都有的构造函数,一个重要的成员函数就是InitInstance,我们知道,在WINDOWS环境下面可以运行同一程序的多个实例,函数InitInstance的作用就是在生成的一个新的实例的时候,完成一些初始化的工作。
Windows允许在同一时刻运行程序的几份拷贝。在概念上,应用程序的初始化可以被分为两个部分:一次性的应用程序初始化工作,这些在应用程序第一次运行时完成,以及实例的初始化工作,每次运行程序的一个拷贝时都会执行这些操作,包括第一次运行时。框架中WinMain实现调用这个函数。重载InitInstance以初始化在Windows下运行的应用程序的每个新实例。
通常,重载InitInstance以构造主窗口对象并设置CWinThread::m_pMainWnd数据成员,使其指向这个窗口。
InitApplication和InitInstance现在成为MFC的CWinApp的两个虚函数,前者负责“每一个程序只做一次”的操作,后者负责“每一个例程都得做一次”的操作。 “每一个程序”指的是进程的概念。“每一个例程”指的是线程的概念。所以InitApplication负责“每一个程序只做一次”的操作。而InitInstance是每一个线程都具有的函数,只不过很多情况下,你自己开的线程没有重载该函数。
其实在基于CWinApp的程序中InitApplication和InitInstance都只执行一次。InitApplication是MFC的较老的入口函数,现在一般不重载InitApplication而直接重载InitInstance。
不过如果使用CWinThread或者AfxBeginThread创建线程,新的线程会执行新建CWinThread对象的InitInsatnce函数一次。不过这和CWinApp没有关系。
- InitInstance函数
- InitInstance函数
- InitInstance()函数
- InitInstance函数
- InitInstance()函数
- InitInstance函数
- InitInstance函数
- VC++ 之 InitInstance()函数
- MFC InitInstance函数
- VC InitInstance函数
- MFC中的InitInstance()函数应该怎样理解
- VC++ 在CXXApp的InitInstance()函数中获取窗口句柄
- 为何在应用程序类InitInstance函数里不能使用 MessageBox这个函数
- MFC中InitInstance函数的作用以及与InitApplication函数的关系
- MFC Dialog InitInstance
- BOOL CtmpMFCApp::InitInstance() {vs2010
- CWinApp中的InitInstance()
- InitInstance() 和 OnInitDialog()
- LeetCode | 3Sum
- Qt中处理First chance exception异常
- HTTPS连接的前几毫秒发生了什么
- AutoCAD二次开发之视图操作(2)通过指定点设置视图。
- liferay ide创建主题,有时候就报错Exception in thread java.lang.StackOverflowError
- InitInstance函数
- Android 基于dpi的资源加载
- 黑马程序员—操作数组的练习:十进制数转换二进制、八进制、十六进制数。
- mysql-5.6主从复制及遇到的错误
- 2013年阿里巴巴一道笔试题(大文件处理)
- c# Json 序列化后转化为对象类集合
- 调用另一个Activity
- SLF4J 的几种实际应用模式--之一:SLF4J+Log4J
- Android学习系列--App集成支付宝