2004-02-04

学习C++虚函数的习作

程序是用BCB写的,用一个Image的Canvas来作为图文编辑器的基础。
代码和EXE下载
edittor.zip
截图如下:



程序的核心是下面的两个文章,里面包括了5个类CEditor,CSuperEditor,CUnit,CCharUnit,CPicUnit。
editor.h

#ifndef _EDITOR_H
#define _EDITOR_H
#include
#include
#include

using namespace std;

class CUnit
{
public:
virtual GetWidth()=0;
virtual GetHeight()=0;
virtual void Draw(int x,int y)=0;
TCanvas* Canvas;
};

class CEditor
{
public:
virtual void Paint()=0;
};

class CSuperEditor:CEditor
{
public:
virtual void Paint();
void AddUnit(CUnit* Unit);
TCanvas* Canvas;
private:
vector Units;
};


class CCharUnit:CUnit
{
public:
virtual GetWidth();
virtual GetHeight();
virtual void Draw(int x,int y);
void SetWord(unsigned char word);
unsigned char GetWord();

CCharUnit()
{
Canvas=NULL;
}

private:
unsigned char Word;
};

class CPicUnit:CUnit
{
public:
virtual GetWidth();
virtual GetHeight();
virtual void Draw(int x,int y);

int GetWord();
TImageList *ImageList;

CPicUnit()
{
ImageList=NULL;
Canvas=NULL;
}
void SetIndex(int index);

private:
int Index;
};

#endif


editor.cpp


#include "Editor.h"

void CSuperEditor::Paint()
{
int w=0;
if(Canvas==NULL)return;
Canvas->Pen->Color=clBlue;
vector::iterator i=Units.begin();
Canvas->TextOutA(0,0,"");
while(i!=Units.end())
{
(*i)->Draw(w,0);
w+=(*i)->GetWidth();
i++;
}
}

void CSuperEditor::AddUnit(CUnit* Unit)
{
Units.push_back(Unit);
Unit->Canvas=Canvas;
}

CCharUnit::GetWidth()
{
return 8;
}

CCharUnit::GetHeight()
{
return 8;
}

void CCharUnit:: SetWord(unsigned char word)
{
Word=word;
}

void CCharUnit::Draw(int x,int y)
{
if(Canvas==NULL)return;
char s[]=" ";
s[0]=Word;
Canvas->TextOutA(x,y,s);
}

CPicUnit::GetWidth()
{
return 16;
}

CPicUnit::GetHeight()
{
return 16;
}

void CPicUnit::Draw(int x,int y)
{
if(Canvas==NULL)return;
if(ImageList==NULL)return;
ImageList->Draw(Canvas,x,y,Index,true);
}

void CPicUnit::SetIndex(int index)
{
Index=index;
}


请不要吝惜您的评论,每一条评论,都是我在漫漫长夜前行的力量

0 条评论:

发表评论

<< 主页