怎么样在一个MFC程序中加入一个基类是CObject的类

aguo2006 2006-08-02 08:43:02

下面是我在一本书上看到的一段源代码和描述:

...............................................................................

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,其他选项使用默认设置;)]]


请大家帮忙, 是不是书里描述有问题呢 还是其他原因 也可以帮我想想其他的解决办法
谢谢了!!!


...全文
331 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
aguo2006 2006-08-02
  • 打赏
  • 举报
回复
谢谢各位了;
感谢 seu07201213 给我用CSDN 短消息的形式 对其它疑点的答复!!

散分了!
xyq1986 2006-08-02
  • 打赏
  • 举报
回复
没找到,自己写嘛
折腾_苏州 2006-08-02
  • 打赏
  • 举报
回复
呵呵,classwizard是辅助的东西,你可以完全手工导入,如下:
vc菜单->project->add to project->Files->添加Shape.h,Shape.cpp

在工程使用的地方#include "Shape.h",就可以了
cleverwyq 2006-08-02
  • 打赏
  • 举报
回复
向导只是一个辅助工具,既然没有,就自己写类咯
然后把c,c++文件加到工程里面就好了
chenyulin 2006-08-02
  • 打赏
  • 举报
回复
你直接添加.cpp和.h文件写就可以了
file->new->c/c++Headerfile
file->new->c++Soursefile

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧