draw.h
来自「Viaual C++实战演练一书的源代码,对于C++程序员有实际的借鉴意义.」· C头文件 代码 · 共 154 行
H
154 行
/*
*
* Define Draw Objects
*
*/
class CDrawObject : public CObject
{
private:
COLORREF m_PenColor;//图元颜色
public:
bool m_bSelected;
long m_nStyle;//图元类型
CDrawObject(){m_bSelected = false;};
void SetPenColor(COLORREF color);//设置图元颜色
COLORREF GetPenColor();//获得图元颜色
void HotPoint(CDC* pDC, long x, long y);
bool AtPoint(long x1, long y1, long x, long y);//判断两点位置关系
bool AtLine(long x1, long y1, long x2, long y2, long x, long y);//判断点和直线的位置关系
virtual void Selected(CDC* pDC, bool select){};//绘制(取消)选择标志
virtual void Draw(CDC* pDC){};//绘制图元
virtual int SelectAt(long x, long y){return 0;};//判断是否选择图元
virtual void MoveAt(CDC* pDC, int flags, long x, long y){};//以指定方式移动图元
virtual int NewPoint(long x, long y){return 0;};//图形对象第一点坐标,如果返回false则结束绘图
virtual int AddPoint(long x, long y){return 0;};//图形对象下一点坐标,如果返回false则结束绘图
virtual void HotPoints(CDC* pDC){};//绘制热点
virtual void Serialize(CArchive& ar){};
DECLARE_SERIAL(CDrawObject);//用于实现串行化输入输出
};
class CDrawLine : public CDrawObject
{
private:
long m_x1, m_y1, m_x2, m_y2;
long m_oldx, m_oldy;
public:
CDrawLine(COLORREF color = UD_RED);
void Selected(CDC* pDC, bool select);
void Draw(CDC* pDC);
int SelectAt(long x, long y);
void MoveAt(CDC* pDC, int flags, long x, long y);
int NewPoint(long x, long y);
void HotPoints(CDC* pDC);//绘制热点
void Serialize(CArchive& ar);
DECLARE_SERIAL(CDrawLine);
};
class CDrawRect : public CDrawObject
{
private:
long m_x1, m_y1, m_x2, m_y2;
long m_oldx, m_oldy;
public:
CDrawRect(COLORREF color = UD_RED);
void Selected(CDC* pDC, bool select);
void Draw(CDC* pDC);
int SelectAt(long x, long y);
void MoveAt(CDC* pDC, int flags, long x, long y);
int NewPoint(long x, long y);
void HotPoints(CDC* pDC);//绘制热点
void Serialize(CArchive& ar);
DECLARE_SERIAL(CDrawRect);
};
class CDrawEllipse : public CDrawObject
{
private:
long m_x1, m_y1, m_x2, m_y2;
long m_oldx, m_oldy;
public:
CDrawEllipse(COLORREF color = UD_RED);
void Selected(CDC* pDC, bool select);
void Draw(CDC* pDC);
int SelectAt(long x, long y);
void MoveAt(CDC* pDC, int flags, long x, long y);
int NewPoint(long x, long y);
void HotPoints(CDC* pDC);//绘制热点
bool AtCurve(long x, long y);//判断点是否在曲线上
void Serialize(CArchive& ar);
DECLARE_SERIAL(CDrawEllipse);
};
class CDrawCircle : public CDrawObject
{
private:
long m_x, m_y, m_r;
long m_oldx, m_oldy;
public:
CDrawCircle(COLORREF color = UD_RED);
void Selected(CDC* pDC, bool select);
void Draw(CDC* pDC);
int SelectAt(long x, long y);
void MoveAt(CDC* pDC, int flags, long x, long y);
int NewPoint(long x, long y);
void HotPoints(CDC* pDC);//绘制热点
bool AtCurve(long x, long y);//判断点是否在曲线上
void Serialize(CArchive& ar);
DECLARE_SERIAL(CDrawCircle);
};
#define MAXPLINEPOINT 20
class CDrawPLine : public CDrawObject
{
private:
CPoint m_aPoints[MAXPLINEPOINT];
long m_oldx, m_oldy;
public:
long m_nNumber;//端点总数
CDrawPLine(COLORREF color = UD_RED);
void Selected(CDC* pDC, bool select);
void Draw(CDC* pDC);
int SelectAt(long x, long y);
void MoveAt(CDC* pDC, int flags, long x, long y);
int NewPoint(long x, long y);
int AddPoint(long x, long y);
void HotPoints(CDC* pDC);//绘制热点
void Serialize(CArchive& ar);
DECLARE_SERIAL(CDrawPLine);
};
class CDrawFont : public CDrawObject
{
private:
long m_x, m_y;
public:
CDrawFont(COLORREF color = UD_RED);
void Selected(CDC* pDC, bool select);
void Draw(CDC* pDC);
int SelectAt(long x, long y);
void MoveAt(CDC* pDC, int flags, long x, long y);
int NewPoint(long x, long y);
void HotPoints(CDC* pDC);//绘制热点
void DrawFont(CDC* pDC);
void Serialize(CArchive& ar);
DECLARE_SERIAL(CDrawFont);
};
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?