📄 line.cpp
字号:
//Line.cpp
#include "stdafx.h"
#include "DrawShape.h"
#include "Draw.h"
#include "Line.h"
extern CDrawShapeView* gpCDrawShapeView;
extern BOOL IsRectCross(float minX, float minY, float maxX, float maxY);
//串行化实现宏
IMPLEMENT_SERIAL(CLine,CObject,1)
CLine::CLine(short colorPen,short colorBrush,short lineWide,
short lineType,short layer,int idOnly,BOOL bDelete,
float x1,float y1,float x2,float y2):CDraw(colorPen,
colorBrush,lineWide,lineType,layer,idOnly,bDelete)
{
m_X1=x1;
m_Y1=y1;
m_X2=x2;
m_Y2=y2;
}
void CLine::Draw(CDC *pDC,int drawMode1,int drawMode2,short color)
{
int x1,y1; //逻辑坐标数据,由APtoLP转换而成
int x2,y2;
if(m_bDelete) //如果作了删除标志,则不绘制该图形
return;
float minX,minY,maxX,maxY;
GetBoundRect(minX,minY,maxX,maxY);
if(!IsRectCross(minX,minY,maxX,maxY))
{
return;
}
//在AddLine()函数中有new CLine(...)语句,实例化直线时,赋了其线型、线颜色、坐标等值
short color_pen=m_ColorPen; //存为局部变量,当要指定颜色显示时
//也不直接为CDraw类数据成员赋值,以免对单个
//图形的颜色赋值而影响所有图形所具有的默认颜色。
short line_type=m_LineType;
short color_brush=m_ColorBrush;
if(drawMode1==0)
pDC->SetROP2(R2_COPYPEN);
else
pDC->SetROP2(R2_NOT);
//设定画笔的线型.宽度.颜色
if(drawMode2==1) //被鼠标选择选择后特殊显示
{
if(m_LineType!=2)// 1:PS_SOLID,2:PS_DASH
m_LineType=2;
else
m_LineType++;
}
else if(drawMode1==2) //指定颜色绘制
{
color_pen=color;
color_brush=color;
}
CPen pen(line_type,m_LineWide,gpCGraphPara->GetColor(color_pen));
CPen* pOldPen=pDC->SelectObject(&pen);
gpCDrawShapeView->APtoLP(m_X1,m_Y1,&x1,&y1);
gpCDrawShapeView->APtoLP(m_X2,m_Y2,&x2,&y2);
pDC->MoveTo(x1,y1);
pDC->LineTo(x2,y2);
pDC->SelectObject(pOldPen);
}
void CLine::GetBoundRect(float& x1, float& y1, float& x2, float& y2)
{
//获得矩形边界坐标
x1 = min(m_X1,m_X2);
y1 = min(m_Y1,m_Y2);
x2 = min(m_X1,m_X2);
y2 = max(m_Y1,m_Y2);
}
void CLine::Serialize(CArchive& ar)
{
CDraw::Serialize(ar); //调用基类的串行化函数
if(ar.IsStoring()) //存储
{
ar<<m_X1<<m_X2<<m_Y1<<m_Y2;
}
else //读取
{
ar>>m_X1>>m_X2>>m_Y1>>m_Y2;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -