视图类没有被实例化 那视图是怎么产生的? 一直搞不懂一个问题 跟踪了vc自动生成的程序好久,怎么觉得程序就生成了一个主窗口 而视图类的派生类根本没有被实力话 那视图应该不会产生啊 而实际上视图是产生了的啊??为什么呢?我今天又在CXXView类的构造函数那设置了一个断点,发现构造函数根本没有被调用啊,那窗口上那个视图区域是怎么产生的呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我今天又在CXXView类的构造函数那设置了一个断点,发现构造函数根本没有被调用啊,那窗口上那个视图区域是怎么产生的呢------------------??你在View类的构造函数中写个AfxMessageBox看看弹的出来不? 实例化的,CFrameWnd会调用CreateView。 Debug下跟踪App类的InitInstance函数中的(以SDI工程为例)CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CGAEDoc), RUNTIME_CLASS(CMainFrame), // main SDI frame window RUNTIME_CLASS(CGAEView)); AddDocTemplate(pDocTemplate);F11进入看看,MFC是怎么将文档,框架,视图联系到一起的 关键就在这一句上:RUNTIME_CLASS(CGAEView));这个说起来很复杂,简单说说我的理解,初学,错误请指正简单的说就是有一个类信息表,专门存储类得信息,当要动态创建一个类得时候,就要到这个表里去找该类的相关信息声明类信息表的代码封装在DECLARE_DYNACREATE中实现信息表的代码在IMPLEMENT_DYNCREATE中这两个宏可以使类具有动态创建的能力你可以在~View.h中找到DECLARE_DYNACREATE(~View)而RUNTIME_CLASS宏的功能就是在上面创建的类信息表中找到相关信息,并调用该类的构造函数来创建对象因此RUNTIME_CLASS(CGAEView));这一句就是在类信息表中寻找View类得信息,并且调用View的构造函数,从而创建视图。 寻找替代Sleep()的方法 32位cpu跑16位的程序,是不是寄存器有一半没有用到? 请教程序如何去掉对msvcr71d.dll和msvcp71d.dll的依赖 在enable时可以如下移动对话框(解决后220分) 发送自定义消息如果传递参数 ----求教----关于关闭模式对话框的问题 VC方面的技术群,欢迎各位加入,一起研究编程技术 请高手进来看看!一个蛮难的问题!-----100分 WM_CHAR消息的问题 creatfile函数的dwShareMode变量 图形的旋转和缩放 如何识别手?
------------------
??
你在View类的构造函数中写个AfxMessageBox看看弹的出来不?
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CGAEDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CGAEView));
AddDocTemplate(pDocTemplate);F11进入看看,MFC是怎么将文档,框架,视图联系到一起的
RUNTIME_CLASS(CGAEView));
这个说起来很复杂,简单说说我的理解,初学,错误请指正
简单的说就是有一个类信息表,专门存储类得信息,当要动态创建一个类得时候,就要到这个表里去找该类的相关信息
声明类信息表的代码封装在DECLARE_DYNACREATE中
实现信息表的代码在IMPLEMENT_DYNCREATE中
这两个宏可以使类具有动态创建的能力
你可以在~View.h中找到DECLARE_DYNACREATE(~View)而RUNTIME_CLASS宏的功能就是在上面创建的类信息表中找到相关信息,并调用该类的构造函数来创建对象
因此RUNTIME_CLASS(CGAEView));这一句就是在类信息表中寻找View类得信息,并且调用View的构造函数,从而创建视图。