怎么样在一个MFC程序中加入一个基类是CObject的类
下面是我在一本书上看到的一段源代码和描述:
...............................................................................
CShape类的定义如下(为了说明方便,删除了一些向导生成的代码)
class CShape : public CObject
{
public:
protected:
CShape();
DECLARE_SERIAL(CShape);
protected:
UINT m_nPenWidth;
COLORREF m_color;
int m_sort;
public:
CRect m_rectBounding;
public:
CRect& GetBoundingRect() {return m_rectBounding;}
public:
bool IsLine() {return (this->m_color==0);}
bool IsRect() {return (this->m_color==1);}
bool IsCircle() {return (this->m_color==2);}
virtual BOOL Draw(CDC* pDC);
virtual BOOL FinishShape();
void SetPenAttr(UINT penw,COLORREF color);
void SetDrawSort(int kind)
{
this->m_sort=kind;
}
public:
virtual void OffsetPoint(CPoint &p);
virtual void Serialize(CArchive &ar);
};
需要注意的是,有4个函数是虚函数,说明它的实现可以在派生类中进行重载.CShape的类实现如下:
#include "Shape.h"
IMPLEMENT_SERIAL(CShape,CObject,2)
CShape::CShape()
{
//This empty constructor should be used by serialization only
m_rectBounding.SetRectEmpty();
}
void CShape::SetPenAttr(UINT penw,COLORREF color)
{
this->m_nPenWidth = penw;
this->m_color=color;
}
void CShape::FinishShape()
{
return;
}
void CShape::Serialize((CArchive &ar)
{
if(ar.IsStoring())
{
ar<<m_rectBounding;
ar<<(WORD)m_nPenWidth;
ar<<m_sort;
}
else
{
ar>>m_rectBounding;
WORD w;
ar>>w;
m_nPenWidth = w;
ar>>m_color;
ar>>m_sort;
}
}
BOOL CShape::Draw(CDC *pDC)
{
return TRUE;
}
void CShape::OffsetPoint(CPoint& p)
{
return;
}
需要说明的有两点:
1.CShape的基类选用CObject,主要是利用它的特性以及MFC类库带来的强大功能;
2.DECLARE_SERIAL(CShape)和IMPLEMENT_SERIAL(CShape,CObject,2)将保证该类能够串形话,它要求类的基础类是CObject或者其派生类,具有默认构造函数;
-----------------------------------------------------------------------------
我的问题是: 我在用向导生成类框架时候 根本选不上CObject类呀;
我的操作Insert/New Class/ Base Class 选项中根本没有CObject类呀??
(这是一个SDI程序 视图类的基类选择的是CScrollView,其他选项使用默认设置;)]]
请大家帮忙, 是不是书里描述有问题呢 还是其他原因 也可以帮我想想其他的解决办法
谢谢了!!!