?? book.cpp
字號:
#include "stdafx.h"
#include "resource.h"
#include "BOOK.h"
//#include "math.h"
///////////CShape類的實現
void CShape::operator=(CShape* obj)
{
x1=obj->x1;
x2=obj->x2;
y1=obj->y1;
y2=obj->y2;
borbarScal=obj->GetBorbarScal();
shapeColor=obj->GetShapeColor();
ifFill=obj->GetIfFill();
objectId=obj->GetId();
objectName=obj->GetName();
center=obj->GetCenter();
}
void CShape::operator=(CShape& obj)
{
x1=obj.x1;
x2=obj.x2;
y1=obj.y1;
y2=obj.y2;
shapeColor=obj.GetShapeColor();
borbarScal=obj.GetBorbarScal();
ifFill=obj.GetIfFill();
objectId=obj.GetId();
objectName=obj.GetName();
center=obj.GetCenter();
}
/////////////CLine類的實現
//直線最終
void CLine::Draw(CDC* pDC)
{
//以下設置DC
CPen pen(PS_SOLID, GetBorbarScal(), GetShapeColor()), *oldpen;
oldpen = pDC->SelectObject(&pen);
//以下移動直線
pDC->MoveTo(x1, y1);
pDC->LineTo(x2, y2);
//以下恢復DC
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
center.x=0.5*((double)x1+(double)x2);
center.y=0.5*((double)y1+(double)y2);
}
void CLine::MoveAt(CDC *pDC, long x, long y)
{
//以下設置DC
COLORREF XorColor = pDC->GetBkColor()^ GetShapeColor();
CPen pen(PS_SOLID, GetBorbarScal(), XorColor), *oldpen;
int oldmode = pDC->GetROP2();
oldpen = pDC->SelectObject(&pen);
pDC->SetROP2(R2_XORPEN);
//以下移動直線
pDC->MoveTo(x1, y1);
pDC->LineTo(x2, y2);//刪除原圖形
x2 = x;
y2 = y;
pDC->MoveTo(x1, y1);
pDC->LineTo(x2, y2);//繪新圖形
//以下恢復DC
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
}
void CLine::NewPoint(long x, long y)
{
x2=x1 = x;
y2=y1 = y;
}
void CLine::Activation(CDC* pDC,COLORREF typeColor)
{
//以下設置DC
CPen pen(PS_SOLID, GetBorbarScal(), typeColor), *oldpen;
oldpen = pDC->SelectObject(&pen);
CBrush* oldbrush;
CBrush brush(typeColor);
oldbrush = (CBrush*)pDC->SelectObject(&brush);
//以下移動直線
pDC->Ellipse(x1-2,y1-2,x1+2,y1+2);
pDC->Ellipse(x2-2,y2-2,x2+2,y2+2);
pDC->Ellipse(center.x-2,center.y-2,center.x+2,center.y+2);
//以下恢復DC
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
}
void CLine::Delete(CDC* pDC,COLORREF bkColor)
{
//以下設置DC
CPen pen(PS_SOLID, GetBorbarScal(), bkColor), *oldpen;
oldpen = pDC->SelectObject(&pen);
//以下移動直線
pDC->MoveTo(x1, y1);
pDC->LineTo(x2, y2);
//以下恢復DC
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
}
//移動
void CLine::MoveShape(int direction)
{
switch(direction)
{
case DIR_EAST:
x1+=MOVE_SPEED;
x2+=MOVE_SPEED;
center.x+=MOVE_SPEED;
break;
case DIR_WEST:
x1-=MOVE_SPEED;
x2-=MOVE_SPEED;
center.x-=MOVE_SPEED;
break;
case DIR_SOUTH:
y1+=MOVE_SPEED;
y2+=MOVE_SPEED;
center.y+=MOVE_SPEED;
break;
case DIR_NORTH:
y1-=MOVE_SPEED;
y2-=MOVE_SPEED;
center.y-=MOVE_SPEED;
break;
}
}
//旋轉
void CLine::Circumrotate(int cock_drt)
{
double angle;
switch(cock_drt)
{
case ID_OBJ_ANTIC:
angle=ROTATE_ANGLE;
break;
case ID_OBJ_DELIC:
angle=-ROTATE_ANGLE;
break;
}
x1=center.x+(x1-center.x)*cos(angle)-(y1-center.y)*sin(angle);
y1=center.y+(x1-center.x)*sin(angle)+(y1-center.y)*cos(angle);
x2=center.x+(x2-center.x)*cos(angle)-(y2-center.y)*sin(angle);
y2=center.y+(x2-center.x)*sin(angle)+(y2-center.y)*cos(angle);
}
void CLine::SizeScal(int mode)
{
double sizeScal;
switch(mode)
{
case IDC_OBJ_SIZE_LARGE:
sizeScal=1.1;
break;
case IDC_OBJ_SIZE_SMALL:
sizeScal=0.9;
break;
}
x1=center.x+(x1-center.x)*sizeScal;
y1=center.y+(y1-center.y)*sizeScal;
x2=center.x+(x2-center.x)*sizeScal;
y2=center.y+(y2-center.y)*sizeScal;
}
//CRectangle類的實現
void CRectangle::Draw(CDC* pDC)
{
//以下設置DC
POINT triangle[4]={{x1,y1},{x3,y3},{x2,y2},{x4,y4}};
CPen pen(PS_SOLID, GetBorbarScal(), GetShapeColor()), *oldpen;
oldpen = pDC->SelectObject(&pen);
CBrush* oldbrush;
CBrush brush(GetShapeColor());
if( GetIfFill() )
oldbrush = (CBrush*)pDC->SelectObject(&brush);
else
oldbrush=(CBrush*)pDC->SelectStockObject(NULL_BRUSH);
//以下移動矩形
pDC->Polygon(triangle,4);
//以下恢復DC
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
center.x=0.5*((double)x1+(double)x2);
center.y=0.5*((double)y1+(double)y2);
}
void CRectangle::Delete(CDC* pDC,COLORREF bkColor)
{
POINT triangle[4]={{x1,y1},{x3,y3},{x2,y2},{x4,y4}};
//以下設置DC
CPen pen(PS_SOLID, GetBorbarScal(), bkColor), *oldpen;
oldpen = pDC->SelectObject(&pen);
CBrush* oldbrush;
CBrush brush(bkColor);
if( GetIfFill() )
oldbrush = (CBrush*)pDC->SelectObject(&brush);
else
oldbrush=(CBrush*)pDC->SelectStockObject(NULL_BRUSH);
//以下移動矩形
pDC->Polygon(triangle,4);
//以下恢復DC
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
}
void CRectangle::MoveAt(CDC *pDC, long x, long y)
{
if( !GetIfFill() )
{//以下設置DC
COLORREF XorColor = pDC->GetBkColor()^ GetShapeColor();
CPen pen(PS_SOLID, GetBorbarScal(), XorColor), *oldpen;
int oldmode = pDC->GetROP2();
oldpen = pDC->SelectObject(&pen);
pDC->SetROP2(R2_XORPEN);
CBrush* oldbrush;
//CBrush brush;
oldbrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
//以下移動矩形
pDC->Rectangle(x1,y1,x2,y2);
x2 = x;
y2 = y;
pDC->Rectangle(x1,y1,x2,y2);
//以下恢復DC
pDC->SetROP2(oldmode);
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
x3=x1;
y3=y2;
x4=x2;
y4=y1;
}
else
{//以下設置DC
COLORREF XorColor = pDC->GetBkColor()^ GetShapeColor();
CPen pen(PS_SOLID, GetBorbarScal(), XorColor), *oldpen;
int oldmode = pDC->GetROP2();
oldpen = pDC->SelectObject(&pen);
pDC->SetROP2(R2_XORPEN);
CBrush* oldbrush;
CBrush brush(XorColor);
oldbrush=(CBrush*)pDC->SelectObject(brush);
//以下移動矩形
pDC->Rectangle(x1,y1,x2,y2);
x2 = x;
y2 = y;
pDC->Rectangle(x1,y1,x2,y2);
//以下恢復DC
pDC->SetROP2(oldmode);
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
x3=x1;
y3=y2;
x4=x2;
y4=y1;
}
}
void CRectangle::NewPoint(long x, long y)
{
x2=x1 = x;
y2=y1 = y;
}
void CRectangle::Activation(CDC* pDC,COLORREF typeColor)
{
//以下設置DC
CPen pen(PS_SOLID, GetBorbarScal(), typeColor), *oldpen;
oldpen = pDC->SelectObject(&pen);
CBrush* oldbrush;
CBrush brush(typeColor);
oldbrush = (CBrush*)pDC->SelectObject(&brush);
//以下移動直線
pDC->Ellipse(x1-2,y1-2,x1+2,y1+2);
pDC->Ellipse(x2-2,y2-2,x2+2,y2+2);
pDC->Ellipse(x3-2,y3-2,x3+2,y3+2);
pDC->Ellipse(x4-2,y4-2,x4+2,y4+2);
//以下恢復DC
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
}
//移動
void CRectangle::MoveShape(int direction)
{
switch(direction)
{
case DIR_EAST:
x1+=MOVE_SPEED;
x2+=MOVE_SPEED;
x3+=MOVE_SPEED;
x4+=MOVE_SPEED;
center.x+=MOVE_SPEED;
break;
case DIR_WEST:
x1-=MOVE_SPEED;
x2-=MOVE_SPEED;
x3-=MOVE_SPEED;
x4-=MOVE_SPEED;
center.x-=MOVE_SPEED;
break;
case DIR_SOUTH:
y1+=MOVE_SPEED;
y2+=MOVE_SPEED;
y3+=MOVE_SPEED;
y4+=MOVE_SPEED;
center.y+=MOVE_SPEED;
break;
case DIR_NORTH:
y1-=MOVE_SPEED;
y2-=MOVE_SPEED;
y3-=MOVE_SPEED;
y4-=MOVE_SPEED;
center.y-=MOVE_SPEED;
break;
}
}
void CRectangle::Circumrotate(int cock_drt)
{
double angle;
switch(cock_drt)
{
case ID_OBJ_ANTIC:
angle=ROTATE_ANGLE;
break;
case ID_OBJ_DELIC:
angle=-ROTATE_ANGLE;
break;
}
x1=center.x+(x1-center.x)*cos(angle)-(y1-center.y)*sin(angle);
y1=center.y+(x1-center.x)*sin(angle)+(y1-center.y)*cos(angle);
x2=center.x+(x2-center.x)*cos(angle)-(y2-center.y)*sin(angle);
y2=center.y+(x2-center.x)*sin(angle)+(y2-center.y)*cos(angle);
x3=center.x+(x3-center.x)*cos(angle)-(y3-center.y)*sin(angle);
y3=center.y+(x3-center.x)*sin(angle)+(y3-center.y)*cos(angle);
x4=center.x+(x4-center.x)*cos(angle)-(y4-center.y)*sin(angle);
y4=center.y+(x4-center.x)*sin(angle)+(y4-center.y)*cos(angle);
}
void CRectangle::SizeScal(int mode)
{
double sizeScal;
switch(mode)
{
case IDC_OBJ_SIZE_LARGE:
sizeScal=1.1;
break;
case IDC_OBJ_SIZE_SMALL:
sizeScal=0.9;
break;
}
x1=center.x+(x1-center.x)*sizeScal;
y1=center.y+(y1-center.y)*sizeScal;
x2=center.x+(x2-center.x)*sizeScal;
y2=center.y+(y2-center.y)*sizeScal;
x3=center.x+(x3-center.x)*sizeScal;
y3=center.y+(y3-center.y)*sizeScal;
x4=center.x+(x4-center.x)*sizeScal;
y4=center.y+(y4-center.y)*sizeScal;
}
//CSquare類的實現
void CSquare::Draw(CDC* pDC)
{
//以下設置DC
POINT triangle[4]={{x1,y1},{x3,y3},{x2,y2},{x4,y4}};
CPen pen(PS_SOLID, GetBorbarScal(), GetShapeColor()), *oldpen;
oldpen = pDC->SelectObject(&pen);
CBrush* oldbrush;
CBrush brush(GetShapeColor());
if( GetIfFill() )
oldbrush = (CBrush*)pDC->SelectObject(&brush);
else
oldbrush=(CBrush*)pDC->SelectStockObject(NULL_BRUSH);
//以下移動矩形
pDC->Polygon(triangle,4);
//以下恢復DC
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
center.x=0.5*((double)x1+(double)x2);
center.y=0.5*((double)y1+(double)y2);
}
void CSquare::Delete(CDC* pDC,COLORREF bkColor)
{
//以下設置DC
POINT triangle[4]={{x1,y1},{x3,y3},{x2,y2},{x4,y4}};
CPen pen(PS_SOLID, GetBorbarScal(), bkColor), *oldpen;
oldpen = pDC->SelectObject(&pen);
CBrush* oldbrush;
CBrush brush(bkColor);
if( GetIfFill() )
oldbrush = (CBrush*)pDC->SelectObject(&brush);
else
oldbrush=(CBrush*)pDC->SelectStockObject(NULL_BRUSH);
//以下移動矩形
pDC->Polygon(triangle,4);
//以下恢復DC
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
}
void CSquare::MoveAt(CDC *pDC, long x, long y)
{
if( !GetIfFill() )
{//以下設置DC
COLORREF XorColor = pDC->GetBkColor()^ GetShapeColor();
CPen pen(PS_SOLID, GetBorbarScal(), XorColor), *oldpen;
int oldmode = pDC->GetROP2();
oldpen = pDC->SelectObject(&pen);
pDC->SetROP2(R2_XORPEN);
CBrush* oldbrush;
//CBrush brush;
oldbrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
//以下移動矩形
pDC->Rectangle(x1,y1,x2,y2);
long min = min(abs(x - x1), abs(y - y1));
if( x < x1 )
x2 = x1 - min;
else
x2 = x1 + min;
if( y < y1 )
y2 = y1 - min;
else
y2 = y1 + min;
pDC->Rectangle(x1,y1,x2,y2);
//以下恢復DC
pDC->SetROP2(oldmode);
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
x3=x1;
y3=y2;
x4=x2;
y4=y1;
}
else
{//以下設置DC
COLORREF XorColor = pDC->GetBkColor()^ GetShapeColor();
CPen pen(PS_SOLID, GetBorbarScal(), XorColor), *oldpen;
int oldmode = pDC->GetROP2();
oldpen = pDC->SelectObject(&pen);
pDC->SetROP2(R2_XORPEN);
CBrush* oldbrush;
CBrush brush(XorColor);
oldbrush=(CBrush*)pDC->SelectObject(brush);
//以下移動矩形
pDC->Rectangle(x1,y1,x2,y2);
long min = min(abs(x - x1), abs(y - y1));
if( x < x1 )
x2 = x1 - min;
else
x2 = x1 + min;
if( y < y1 )
y2 = y1 - min;
else
y2 = y1 + min;
pDC->Rectangle(x1,y1,x2,y2);
//以下恢復DC
pDC->SetROP2(oldmode);
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
x3=x1;
y3=y2;
x4=x2;
y4=y1;
}
}
void CSquare::NewPoint(long x, long y)
{
x2=x1 = x;
y2=y1 = y;
}
void CSquare::Activation(CDC* pDC,COLORREF typeColor)
{
//以下設置DC
CPen pen(PS_SOLID, GetBorbarScal(), typeColor), *oldpen;
oldpen = pDC->SelectObject(&pen);
CBrush* oldbrush;
CBrush brush(typeColor);
oldbrush = (CBrush*)pDC->SelectObject(&brush);
//以下移動直線
pDC->Ellipse(x1-2,y1-2,x1+2,y1+2);
pDC->Ellipse(x2-2,y2-2,x2+2,y2+2);
pDC->Ellipse(x3-2,y3-2,x3+2,y3+2);
pDC->Ellipse(x4-2,y4-2,x4+2,y4+2);
//以下恢復DC
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
}
//移動
void CSquare::MoveShape(int direction)
{
switch(direction)
{
case DIR_EAST:
x1+=MOVE_SPEED;
x2+=MOVE_SPEED;
x3+=MOVE_SPEED;
x4+=MOVE_SPEED;
center.x+=MOVE_SPEED;
break;
case DIR_WEST:
x1-=MOVE_SPEED;
x2-=MOVE_SPEED;
x3-=MOVE_SPEED;
x4-=MOVE_SPEED;
center.x-=MOVE_SPEED;
break;
case DIR_SOUTH:
y1+=MOVE_SPEED;
y2+=MOVE_SPEED;
y3+=MOVE_SPEED;
y4+=MOVE_SPEED;
center.y+=MOVE_SPEED;
break;
case DIR_NORTH:
y1-=MOVE_SPEED;
y2-=MOVE_SPEED;
y3-=MOVE_SPEED;
y4-=MOVE_SPEED;
center.y-=MOVE_SPEED;
break;
}
}
void CSquare::Circumrotate(int cock_drt)
{
double angle;
switch(cock_drt)
{
case ID_OBJ_ANTIC:
angle=ROTATE_ANGLE;
break;
case ID_OBJ_DELIC:
angle=-ROTATE_ANGLE;
break;
}
x1=center.x+(x1-center.x)*cos(angle)-(y1-center.y)*sin(angle);
y1=center.y+(x1-center.x)*sin(angle)+(y1-center.y)*cos(angle);
x2=center.x+(x2-center.x)*cos(angle)-(y2-center.y)*sin(angle);
y2=center.y+(x2-center.x)*sin(angle)+(y2-center.y)*cos(angle);
x3=center.x+(x3-center.x)*cos(angle)-(y3-center.y)*sin(angle);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -