DECLARE_DYNAMIC(class_name)是放在一个类的内部的,实际上是下面写的这样,你觉得是不是应该有个public呢,说明下面的是公有成员嘛。
public:
static CRuntimeClass class##class_name;
virtual CRuntimeClass* GetRuntimeClass() const;##的意思是前后实际组成一个字符串,因为class_name是动态的,比如我给他一个MyClass
class##class_name 就表示 classMyClass,我讲明白了吗?
public:
static CRuntimeClass class##class_name;
virtual CRuntimeClass* GetRuntimeClass() const;##的意思是前后实际组成一个字符串,因为class_name是动态的,比如我给他一个MyClass
class##class_name 就表示 classMyClass,我讲明白了吗?
解决方案 »
- 相同参数POST第二次出现 501 Method Not Implemented,
- 请教得到一个pWebBrowser2后,如何得到它所在的进程ID?
- 图像处理中,如何方便的同时获取图像的像素值和像素的坐标呢?
- 如何显示灰色的icon
- 技术分很重要吗?回答问题仅仅为了技术分吗?
- 怎么改变CStatusBar的第一个PANE的提示信息
- VC 中的DDX 和 DDV 有逻辑漏洞
- 打印报表的问题,急~在线等!
- 请给几个网址(关于操作系统,c++,C#,html的ebook教材)
- 有关Socket的问题
- 求救CSOCKET编程中SERVER端第二个套接字声明的位置?
- enum { IDD = IDD_CUSTOM_DIALOG }; 是不是在构造函数中 使得对话框对象与资源关联
2. ##是用来连接字符串之用的,由预处理器粘合,譬如如果你宣示 DECLARE_DYNAMIC(MyClass)的话
static CRuntimeClass class##class_name
就变成
static CRuntimeClass classMyClass
#define _IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew) static char _lpsz##class_name[] = #class_name; CRuntimeClass class_name::class##class_name = { _lpsz##class_name, sizeof(class_name), wSchema, pfnNew, RUNTIME_CLASS(base_class_name), NULL }; static AFX_CLASSINIT _init_##class_name(&class_name::class##class_name); CRuntimeClass* class_name::GetRuntimeClass() const { return &class_name::class##class_name; } 有没有一本书详细介绍C++宏的语法,各位大虾,你们当初是怎样征服这些宏的。
就变成
static char _lpszMyClass [] = "MyClass";