MFC的应用程序类源文件中,有个CWinApp类的派生类的对象theApp,它到底起个啥作用?
求内行指点,我是MFC菜鸟+小白。书上说:已定义好的入口点函数WinMain()函数会获取这个theApp对象的指针,从而调用应用程序对象的成员函数。难不成,这个所谓的t...
求内行指点,我是MFC菜鸟+小白。书上说:已定义好的入口点函数WinMain( )函数会获取这个theApp对象的指针,从而调用应用程序对象的成员函数。难不成,这个所谓的theApp就是我运行时的那个MFC框架实体本身?但肯定不是,这只是一个应用程序类的实例化对象啊。另外,其他诸如:框架窗口类、文档类、视图类,程序中找不到它们实例化的语句啊,它们只是一个抽象的类而已,终究是要实例化的,但它们的实例化在何处发生呢?
展开
1个回答
展开全部
theApp是全局变量, 在进入程序入口这前已实例化了,这是基本常识啊.
cwinapp它派生自cwiinthread,c++的多态,就是利用基类来表达子类的行为.
mfc框架指的是程序入口_afxwinmain里面那段代码.基于对话框,单文档,多文档,都用得是这段代码.而不同的特性,则是靠实际派生类重载virtual函数来实现的(也就是所谓的多态的行为),
这是其一.
其二,main只是一个架子,对于一个框架程序来说,还是远远不够的.所以v s的向导在cwinapp派生类重载了相关的函数,完成了一切窗口建立所必需的流程(建立窗口类,注册窗口类,创建窗口等等).了解到这一点,用mfc编程就相当安逸了.
但是,mfc并不是如此简单,它相比传统的win32窗口建立多了点变化.问题就出在win32消息太多了,不可能为窗口类去定义所有的消息处理用virtual函数,所以引入消息映射表.
所以在窗口创建前,要放hook,保证各个相关都有机会去响应消息.这是很好的设计.
----------
以后你接触一些大程序的架构,你都能找到mfc架构的影子.其实这就是编程技法.看多了,你也会这么用设计的.
好好看下各向导下,InitInstance()提供的实现,你会找到答案的.
cwinapp它派生自cwiinthread,c++的多态,就是利用基类来表达子类的行为.
mfc框架指的是程序入口_afxwinmain里面那段代码.基于对话框,单文档,多文档,都用得是这段代码.而不同的特性,则是靠实际派生类重载virtual函数来实现的(也就是所谓的多态的行为),
这是其一.
其二,main只是一个架子,对于一个框架程序来说,还是远远不够的.所以v s的向导在cwinapp派生类重载了相关的函数,完成了一切窗口建立所必需的流程(建立窗口类,注册窗口类,创建窗口等等).了解到这一点,用mfc编程就相当安逸了.
但是,mfc并不是如此简单,它相比传统的win32窗口建立多了点变化.问题就出在win32消息太多了,不可能为窗口类去定义所有的消息处理用virtual函数,所以引入消息映射表.
所以在窗口创建前,要放hook,保证各个相关都有机会去响应消息.这是很好的设计.
----------
以后你接触一些大程序的架构,你都能找到mfc架构的影子.其实这就是编程技法.看多了,你也会这么用设计的.
好好看下各向导下,InitInstance()提供的实现,你会找到答案的.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询