能力值:
( LV2,RANK:10 )
|
-
-
2 楼
我的理解就是,theApp实质是进程,它的句柄也就是进程的句柄,其实是和CWnd实例(Instance)是一回事,建议你去了解下什么是实例(Instance),其实就是类的对象,当我们创建一个类的对象是就是对这个类进行实例化.
窗口和进程是两码事,一个进程可以拥有多个窗口,窗口的句柄不能等同于进程的句柄,自然和theApp对象没有什么特别大的关系了
|
能力值:
( LV5,RANK:70 )
|
-
-
3 楼
这个涉及“面向对象”思想。下面我谈谈自己的见解
我觉得你首先要弄明白,窗口与实例是两码事。。。窗口句柄 != 实例句柄。实例句柄标示一个进程,窗口句柄标示一个窗口。
其次,你要弄明白类的层次,下面演示一个例子:新建一个MFC工程,取名为Test。
找到 theApp的定义,可以发现:CTestApp theApp;
为了弄明白theApp到底是什么东东,我们就要看CTestApp 类到底定义了什么。
找到定义,可以发现:class CTestApp : public CWinApp
在这个定义下看不到什么有用的东西,然后我们看看CWinApp下定义了什么。
找到CWinApp的定义,可以发现这段代码(节选):
class CWinApp : public CWinThread
{
DECLARE_DYNAMIC(CWinApp)
public:
// Constructor
CWinApp(LPCTSTR lpszAppName = NULL); // app name defaults to EXE name
// Attributes
// Startup args (do not change)
HINSTANCE m_hInstance;
HINSTANCE m_hPrevInstance;
LPTSTR m_lpCmdLine;
int m_nCmdShow;
......
你看,上面是不是封装了你要找的m_hInstance?也就是你说的“执行WinMain的时候 系统会传给它一个实例号句柄”?
theApp对象实际上就代表了整个程序,“主窗口句柄”之类的东西都只是它的一部分而已,只是继承层次比较深所以不容易发现而已。正如大脑只是人体的组成部分之一。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我觉得,首先MFC是基于Mvc框架的,所以得这么来看问题。在一个工程中,theApp就是工程的model,而对话框也就是窗口就是view。每个窗口都会有一个WinMian主函数,这个函数只是作为这个窗口的入口,仅仅是工程的一个视图而已。
|
能力值:
( LV5,RANK:70 )
|
-
-
5 楼
这位同学也陷入怪圈了,认为窗口就代表了程序。。。一个进程只有一个入口。。。那就是main或WinMain,这个进程可以一个窗口也没有,也可以创建很多个窗口。。。窗口是没有入口函数的,而是进程调用API在屏幕上画出来的。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
理解深刻.
|
|
|