?? book.cpp
字號:
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 CSquare::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;
}
//CEllipse類實現
void CEllipse::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->Ellipse(x1,y1,x2,y2);
x2 = x;
y2 = y;
pDC->Ellipse(x1,y1,x2,y2);
//以下恢復DC
pDC->SetROP2(oldmode);
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
}
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->Ellipse(x1,y1,x2,y2);
x2 = x;
y2 = y;
pDC->Ellipse(x1,y1,x2,y2);
//以下恢復DC
pDC->SetROP2(oldmode);
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
}
}
void CEllipse::Draw(CDC* pDC)
{
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->Ellipse(x1,y1,x2,y2);
//以下恢復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 CEllipse::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(x1-2,y2-2,x1+2,y2+2);
pDC->Ellipse(x2-2,y1-2,x2+2,y1+2);
//以下恢復DC
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
}
void CEllipse::Delete(CDC* pDC,COLORREF bkColor)
{
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->Ellipse(x1,y1,x2,y2);
//以下恢復DC
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
}
void CEllipse::NewPoint(long x, long y)
{
x1 = x2 = x;
y1 = y2 = y;
}
//移動
void CEllipse::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 CEllipse::Circumrotate(int cock_drt)
{
return;
}
void CEllipse::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;
}
//CCircle類實現
void CCircle::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->Ellipse(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->Ellipse(x1,y1,x2,y2);
//以下恢復DC
pDC->SetROP2(oldmode);
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
}
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->Ellipse(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->Ellipse(x1,y1,x2,y2);
//以下恢復DC
pDC->SetROP2(oldmode);
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
}
}
void CCircle::Draw(CDC* pDC)
{
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->Ellipse(x1,y1,x2,y2);
//以下恢復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 CCircle::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(x1-2,y2-2,x1+2,y2+2);
pDC->Ellipse(x2-2,y1-2,x2+2,y1+2);
//以下恢復DC
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
}
void CCircle::Delete(CDC* pDC,COLORREF bkColor)
{
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->Ellipse(x1,y1,x2,y2);
//以下恢復DC
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
}
void CCircle::NewPoint(long x, long y)
{
x1 = x2 = x;
y1 = y2 = y;
}
//移動
void CCircle::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 CCircle::Circumrotate(int cock_drt)
{
return;
}
void CCircle::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;
}
/////////////CTriangle類的實現
void CTriangle::Draw(CDC* pDC)
{
//以下設置DC
POINT triangle[3]={{x1,y1},{x2,y2},{x3,y3}};
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,3);
//以下恢復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 CTriangle::Delete(CDC* pDC,COLORREF bkColor)
{
//以下設置DC
POINT triangle[3]={{x1,y1},{x2,y2},{x3,y3}};
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,3);
//以下恢復DC
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
}
void CTriangle::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;
oldbrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
//以下移動矩形
pDC->MoveTo(x1,y1);
pDC->LineTo(x2,y2);
pDC->LineTo(x1,y2);
pDC->LineTo(x1,y1);
x2 = x;
y2 = y;
pDC->MoveTo(x1,y1);
pDC->LineTo(x2,y2);
pDC->LineTo(x1,y2);
pDC->LineTo(x1,y1);
//以下恢復DC
pDC->SetROP2(oldmode);
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
x3=x1;
y3=y2;
}
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->Polygon(triangle,3);
pDC->MoveTo(x1,y1);
pDC->LineTo(x2,y2);
pDC->LineTo(x1,y2);
pDC->LineTo(x1,y1);
x2 = x;
y2 = y;
pDC->MoveTo(x1,y1);
pDC->LineTo(x2,y2);
pDC->LineTo(x1,y2);
pDC->LineTo(x1,y1);
//以下恢復DC
pDC->SetROP2(oldmode);
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
x3=x1;
y3=y2;
}
}
void CTriangle::NewPoint(long x, long y)
{
x3=x2=x1 = x;
y3=y2=y1 = y;
}
void CTriangle::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);
//以下恢復DC
pDC->SelectObject(&oldbrush);
pDC->SelectObject(oldpen);
pen.DeleteObject();//釋放筆資源
}
//移動
void CTriangle::MoveShape(int direction)
{
switch(direction)
{
case DIR_EAST:
x1+=MOVE_SPEED;
x2+=MOVE_SPEED;
x3+=MOVE_SPEED;
center.x+=MOVE_SPEED;
break;
case DIR_WEST:
x1-=MOVE_SPEED;
x2-=MOVE_SPEED;
x3-=MOVE_SPEED;
center.x-=MOVE_SPEED;
break;
case DIR_SOUTH:
y1+=MOVE_SPEED;
y2+=MOVE_SPEED;
y3+=MOVE_SPEED;
center.y+=MOVE_SPEED;
break;
case DIR_NORTH:
y1-=MOVE_SPEED;
y2-=MOVE_SPEED;
y3-=MOVE_SPEED;
center.y-=MOVE_SPEED;
break;
}
}
void CTriangle::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);
}
void CTriangle::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;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -