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 + -
显示快捷键?