b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

declare_dyncreate_DYNCREATE等宏

电脑杂谈  发布时间:2016-04-15 10:29:02  来源:网络整理

你是否正在寻找关于declare_dyncreate的内容?让我把最实在的东西奉献给你:

declare_dyncreate等宏

DECLARE_DYNAMIC

IMPLEMENT_DYNAMIC

当你从CObject派生类的时候,该宏使你的类有能力处理运行时信息(比如类型识别).你可以通过RUNTIME_CLASS宏和CObject::IsKindOf函数在运行时确定你的类的对象的所属类. 支持动态创建和保存装载,所以需要MFC动态创建和序列化的类都需要,比如文档视图MFC创建的。
declare_dyncreate

IMPLEMENT_DYNCREATE

使CObject的派生类可以在运行时动态创建.系统可以该功能动态创建类的对象,举个例子,当你的程序通过序列化从磁盘读取对象数据时,可以动态创建该类的对象.
DECLARE_SERIAL

IMPLEMENT_SERIAL

该宏使拥有它的CObject派生类可以序列化

BEGIN_MESSAGE_MAP()

END_MESSAGE_MAP()

定义消息映射关系,拥有消息队列的类都应该有,比如窗口类。

declare_dyncreate

declare_dyncreate( class_name )

参数: class_name 类的实际名字(不用引号括起来),。

说明:

使用declare_dyncreate宏可以使每个CObject的派生类的对象具有运行时动态创建的能力。框架利用这种能力来动态创建对象,例如,当它在串行化过程中从磁盘读取对象的时候。文档、视和框架类必须支持动态创建,因为框架需要动态地创建它们。

在类的.H模块中加入declare_dyncreate宏,然后在每个需要访问这个类的对象的.CPP模块中包含这个模块。

如果在类声明中包含了declare_dyncreate,那么必须在类的实现中包含IMPLEMENT_DYNCREATE宏。

关于declare_dyncreate宏的更多信息参见“Visual C++程序员指南”中的“CObject类主题”。

问答:

<<Dissecting MFC>>章看了一遍,想问:

1.哪些类要DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC,哪些类要declare_dyncreate/IMPLEMENT_DYNCREATE,哪些类又要BEGIN_MESSAGE_MAP()/END_MESSAGE_MAP()呢?不会要靠死记吧,是什么规律?

2.用Console程序来模仿MFC的动作,如不建立窗口则可以不要CView和CDocument类系吧?

3.在Persistence相关章节中,如果从某个CArchieve对象中读出的一个类名在内存中没有任何定义或声明的信息,这如何能Dynamic Create出来呢?(我想是不可能的)

回答1:

声明declare_dyncreate/IMPLEMENT_DYNCREATE表明该类的实例可以动态创建。一般从CCmdTarget类继承下来的类都有BEGIN_MESSAGE_MAP()/END_MESSAGE_MAP()对消息进行处理
2.没有关系。
3.通过类名来创建实例这就是动态创建的功能阿,当然前提是你一定要事先在该类里加上了declare_dyncreate/IMPLEMENT_DYNCREATE声明,至于怎么创建出来的,书里讲得很清楚吧,我记得是创建了一个数据结构的链表,。。。。

回答2

1.DECLARE_DYNAMIC只需要运行时,就要用这个宏
IMPLEMENT_DYNAMIC,支持动态创建,其中包含了对DECLARE_DYNAMIC的支持
mfc用到了文档模板,所以,cdocument,cview,cframewnd派生的都需要IMPLEMENT_DYNAMIC

BEGIN_MESSAGE_MAP()/END_MESSAGE_MAP()定义消息映射的宏,派生自ccmdtarget的类都可以用它,(ccmdtarget的字面意义也是处理消息,command target,深入浅出mfc后面有)
2.用Console程序来模仿MFC的动作,如不建立窗口则可以不要CView和CDocument类系吧?
用cview和cdocument是为了更清楚的讲解framework,否则就不是模仿mfc了。

3.类名已保存在磁盘文件中,读取文件,获得类名字符串,再利用动态创建就可以创建了,书的第四部分第一章有详细解释

DECLARE_MESSAGE_MAP()

在一些资料上,有这么一段文字:
DECLARE_MESSAGE_MAP()
说明:
用户程序中的每个CCmdTarget派生类必须提供消息映射以处理消息。在类定义的末尾使用DECLARE_MESSAGE_MAP宏。接着,在定义类成员函数的.CPP文件中,使用BEGIN_MESSAGE_MAP宏,每个用户消息处理函数的宏项下面的列表以及END_MESSAGE_MAP宏。
注释:
如果在DECLARE_MESSAGE_MAP之后定义任何一个成员,那么必须为他们指定一个新存取类型(公共的,私有的,保护的)。
我觉得他描述得欠妥,我的理解是:
只要有:只要是CCmdTarget(用于所有能够消息映射的基类)派生类,必有消息映射以处理消息,则在类的说明文件的尾部有DECLARE_MESSAGE_MAP宏,在类的定义文件中有BEGIN_MESSAGE_MAP宏和END_MESSAGE_MAP宏以处理用户消息。
其中BEGIN_MESSAGE_MAP(参数1,参数2) ,参数1为该类的类名,参数2为该类基类的类名。
其中ON_MESSAGE(参数1,参数2),参数1为响应的消息,参数2为该消息对应的处理的函数名。

posted @

以上就是关于declare_dyncreate的全部内容,相信你一定会非常满意。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shenmilingyu/article-843-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 吴蒙庵
        吴蒙庵

        正愁没理由进驻军事部署的

      • 陈端阳
        陈端阳

        仅凭“可能有”就随便入侵一个国家

      • 宋教仁
        宋教仁

        敢到朝鲜打击美国佬

      热点图片
      拼命载入中...