📄 visualobject.h
字号:
#ifndef _VISUALOBJECT_H_
#define _VISUALOBJECT_H_
/************************************************************************/
/* CVisualObject Class */
/************************************************************************/
class CDisplayer;
class CVisualObject{ // 可是物体的公用接口
public:
CVisualObject(CDisplayer* pDisplayer) : _pDisplayer(pDisplayer),_bSelected(false) {}
virtual ~CVisualObject(void);
virtual void Draw(CDC* pDC); // 在pDC上画出自己
virtual void OnLButtonDown(UINT nFlags,const CPoint& p); // 拾取
virtual bool OnMouseMove(UINT nFlags,const CPoint& p); // 拖动,有效返回true
virtual bool Selected(); // 是否被拾取到
virtual CString ToString(); // 用来显示hint
protected:
CDisplayer* getDisplayer() const { return _pDisplayer; }
bool _bSelected;
private:
CDisplayer* _pDisplayer;
};
/************************************************************************/
/* CVisualLine Class */
/************************************************************************/
class CVisualLine : public CVisualObject {
public:
CVisualLine(CDisplayer* pDisplayer,const CPoint& p)
: CVisualObject(pDisplayer),_p1(p),_bP2Valid(false){}
virtual void Draw(CDC* pDC);
virtual void OnLButtonDown(UINT nFlags,const CPoint& p);
virtual bool OnMouseMove(UINT nFlags,const CPoint& p);
virtual CString ToString();
private:
bool OnLine(const CPoint& p);
CPoint _p1;
CPoint _p2;
bool _bP2Valid;
double _dLen; // 线的长度
double _dAngle; // 线的角度
};
/************************************************************************/
/* CVisualPoint Class */
/************************************************************************/
class CVisualPoint : public CVisualObject {
public:
CVisualPoint(CDisplayer* pDisplayer,const CPoint& p)
: CVisualObject(pDisplayer),_pt(p){}
virtual void Draw(CDC* pDC);
virtual void OnLButtonDown(UINT nFlags,const CPoint& p);
virtual bool OnMouseMove(UINT nFlags,const CPoint& p);
virtual CString ToString();
private:
CPoint _pt;
};
/************************************************************************/
/* CVisualRect Class */
/************************************************************************/
class CVisualRect : public CVisualObject {
public:
CVisualRect(CDisplayer* pDisplayer,const CPoint& p)
: CVisualObject(pDisplayer),_p1(p),_bRectValid(false){}
virtual void Draw(CDC* pDC);
virtual void OnLButtonDown(UINT nFlags,const CPoint& p);
virtual bool OnMouseMove(UINT nFlags,const CPoint& p);
virtual CString ToString();
private:
bool OnRect(const CPoint& p);
bool OnLine(const CPoint& p1,const CPoint& p2,const CPoint& p); // 判断p是否在以p1,p2为端点的线段上
CPoint _p1;
CRect _rect;
bool _bRectValid;
};
/************************************************************************/
/* CVisualCircle Class */
/************************************************************************/
class CVisualCircle : public CVisualObject {
public:
CVisualCircle(CDisplayer* pDisplayer,const CPoint& p)
: CVisualObject(pDisplayer),_center(p),_bRadiusValid(false){}
virtual void Draw(CDC* pDC);
virtual void OnLButtonDown(UINT nFlags,const CPoint& p);
virtual bool OnMouseMove(UINT nFlags,const CPoint& p);
virtual CString ToString();
private:
bool OnCircle(const CPoint& p);
CPoint _center;
long _radius;
bool _bRadiusValid;
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -