看到DECLARE_DYNAMIC宏实际在类中加了两个东西,而第二个GetRuntimeClass()函数就是返回第一个CRuntimeClass对象,两个东西都是public, 那直接访问就好了,加这个函数有什么用呢?
摘自候捷的深入浅出第3章,part1,p126
// in header file
class CView : public CWnd
{
public:
static CRuntimeClass classCView; \
virtual CRuntimeClass* GetRuntimeClass() const;
...
};
摘自候捷的深入浅出第3章,part1,p126
// in header file
class CView : public CWnd
{
public:
static CRuntimeClass classCView; \
virtual CRuntimeClass* GetRuntimeClass() const;
...
};
CWnd *pWnd = ...;void AccessWindow1(CWnd *pWnd)
{
CRuntimeClass* pRTC = pWnd->GetRuntimeClass();
.....
}void AccessWindow2(CWnd *pWnd)
{
CRuntimeClass* pRTC = &pWnd->classCView;
.....
}当调用AccessWindow1(pView);时,pView被cast成CWnd *指针,但是GetRuntimeClass是虚函数,从而使pRTC得到的仍是CView的classCView对象当调用AccessWindow2(pView);时,pView被cast成CWnd *指针,此时pRTC就是CWnd::classCView这就是区别和好处