📄 circle.cpp
字号:
// Circle.cpp: implementation of the CCircle class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Circle.h"
#include "DrawView.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CCircle::CCircle( CDrawView & v ) : CLine( v )
{
this->draw.tag = CIRCLE;
}
CCircle::~CCircle()
{
}
CDrawBase * CCircle::Clone( void )
{
CCircle * obj = new CCircle( this->view );
memcpy( &obj->draw , &this->draw , sizeof( DRAW ) );
return obj;
}
bool CCircle::Select( CRect & rc )
{
rc.NormalizeRect();
CRgn r0 , r1;
r0.CreateRectRgn( rc.left , rc.top , rc.right , rc.bottom );
CRect r( this->draw.start , this->draw.end );
r.NormalizeRect();
r1.CreateEllipticRgn( r.left , r.top , r.right , r.bottom );
if( this->draw.brush.lbStyle == BS_NULL )
{
CRgn r2;
r.DeflateRect( this->draw.pen.lopnWidth.x + 1 , this->draw.pen.lopnWidth.y + 1 );
r2.CreateEllipticRgn( r.left , r.top , r.right , r.bottom );
r1.CombineRgn( &r1 , &r2 , RGN_DIFF );
}
return this->draw_select = r0.CombineRgn( &r0 , &r1 , RGN_AND ) != NULLREGION;
}
void CCircle::OnMouseMove( UINT nFlags , CPoint point )
{
if( nFlags & MK_SHIFT )
{ //计算最小的边
int min = min( abs( point.x - this->draw.start.x ) , abs( point.y - this->draw.start.y ) );
//计算最小的矩形
point.x = this->draw.start.x + ( point.x > this->draw.start.x ? 1 : -1 ) * min;
point.y = this->draw.start.y + ( point.y > this->draw.start.y ? 1 : -1 ) * min;
}
CDrawBase::OnMouseMove( nFlags , point );
}
void CCircle::OnDraw( CDC * pDC )
{
CDrawBase::OnDraw( pDC );
CRect rc( draw.start , draw.end );
rc.NormalizeRect( );
pDC->Ellipse( rc );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -