首页
社区
课程
招聘
[求助]MFC编程中TheApp实例化对对象问题
发表于: 2013-9-14 15:23 8938

[求助]MFC编程中TheApp实例化对对象问题

2013-9-14 15:23
8938
众所周知, 每一个MFC创建都会有一个 theApp 全局对象,
即:从CWnd 派生出来的实例化对象。

WinMain 是窗口的入口函数, 执行WinMain的时候 系统会传给它一个实例号句柄。

这个实例号句柄就是  主窗口的句柄了

但是在MFC中创建的theApp ,我想请问,theApp 到最后会变成  主窗口句柄吗?

如果不是?那它的具体作用是啥?

PS:百度我查了,都说什么实例,基本都是复制.

大神来解析

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我的理解就是,theApp实质是进程,它的句柄也就是进程的句柄,其实是和CWnd实例(Instance)是一回事,建议你去了解下什么是实例(Instance),其实就是类的对象,当我们创建一个类的对象是就是对这个类进行实例化.
窗口和进程是两码事,一个进程可以拥有多个窗口,窗口的句柄不能等同于进程的句柄,自然和theApp对象没有什么特别大的关系了
2013-9-14 18:36
0
雪    币: 114
活跃值: (72)
能力值: ( 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对象实际上就代表了整个程序,“主窗口句柄”之类的东西都只是它的一部分而已,只是继承层次比较深所以不容易发现而已。正如大脑只是人体的组成部分之一。
2013-9-27 18:46
0
雪    币: 46
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我觉得,首先MFC是基于Mvc框架的,所以得这么来看问题。在一个工程中,theApp就是工程的model,而对话框也就是窗口就是view。每个窗口都会有一个WinMian主函数,这个函数只是作为这个窗口的入口,仅仅是工程的一个视图而已。
2013-9-27 19:42
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
这位同学也陷入怪圈了,认为窗口就代表了程序。。。一个进程只有一个入口。。。那就是main或WinMain,这个进程可以一个窗口也没有,也可以创建很多个窗口。。。窗口是没有入口函数的,而是进程调用API在屏幕上画出来的。。。
2013-9-27 19:54
0
雪    币: 19
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
理解深刻.
2013-9-27 20:22
0
游客
登录 | 注册 方可回帖
返回
//