程序是用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:
vectorUnits;
};
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 条评论:
发表评论
<< 主页