?? croundrectangle.cpp
字號:
#include "stdafx.h"
#include"CRoundRectangle.h"
#include"EastDrawView.h"
IMPLEMENT_SERIAL(CRoundRectangle,CUnit,1)
void CRoundRectangle::DrawStatic(CDC*pDC)
{
CPen m_pen;
CBrush m_brush;
int oldDrawingMode=pDC->SetROP2(this->m_DrawingMode);
m_pen.CreatePen(m_PenStyle,m_PenWidth,m_PenColor);
CPen* pen=(CPen*)pDC->SelectObject(&m_pen);
LOGBRUSH brushlog;
brushlog.lbColor=m_BrushColor;
brushlog.lbHatch=m_BrushHatch;
brushlog.lbStyle=m_BrushStyle;
m_brush.CreateBrushIndirect(&brushlog);
SetBrushOrg(pDC,&m_brush);
CBrush*brush=(CBrush*)pDC->SelectObject(&m_brush);
int OldBkMode=pDC->SetBkMode(m_BkMode);
COLORREF OldColor=pDC->SetBkColor(m_BackgroundColor);
pDC->RoundRect(CRect(m_FirstPoint,m_SecondPoint),CPoint(abs(m_FirstPoint.x-m_SecondPoint.x)/3,abs(m_FirstPoint.y-m_SecondPoint.y)/3));
pDC->SelectObject(brush);
pDC->SelectObject(pen);
pDC->SetBkMode(OldBkMode);
pDC->SetBkColor(OldColor);
pDC->SetROP2(oldDrawingMode);
}
CRoundRectangle::CRoundRectangle()
{
Initial();
//m_Shape=0;
m_BrushStyle=BS_HOLLOW;
m_BrushHatch=HS_CROSS;
}
void CRoundRectangle::Serialize(CArchive &ar)
{
CUnit::Serialize(ar);
if(ar.IsStoring())
{
ar<<m_BrushStyle<<m_BrushHatch<<m_BrushColor;
}
else
{
ar>>m_BrushStyle>>m_BrushHatch>>m_BrushColor;
}
}
BOOL CRoundRectangle::IsInRgn(CPoint point)
{
CPoint FirstPoint;
CPoint SecondPoint;
FirstPoint.x=m_FirstPoint.x<m_SecondPoint.x?m_FirstPoint.x:m_SecondPoint.x;
FirstPoint.y=m_FirstPoint.y<m_SecondPoint.y?m_FirstPoint.y:m_SecondPoint.y;
SecondPoint.x=m_FirstPoint.x>m_SecondPoint.x?m_FirstPoint.x:m_SecondPoint.x;
SecondPoint.y=m_FirstPoint.y>m_SecondPoint.y?m_FirstPoint.y:m_SecondPoint.y;
m_FirstPoint=FirstPoint;
m_SecondPoint=SecondPoint;
CRect rgn1;
rgn1.SetRect(m_FirstPoint.x,m_FirstPoint.y,m_SecondPoint.x,m_SecondPoint.y);
rgn1.InflateRect(4,4);
CRect rgn2;
rgn2.SetRect(m_FirstPoint.x,m_FirstPoint.y,m_SecondPoint.x,m_SecondPoint.y);
rgn2.DeflateRect(4,4);
return rgn1.PtInRect(point)&&!rgn2.PtInRect(point);
}
int CRoundRectangle::IsOnMarginPoint(CPoint point)
{
CRect rect(point,point);
rect.InflateRect(CSize(4,4));
CPoint lpoint=m_FirstPoint;
//lpoint.Offset(abs(m_FirstPoint.x-m_SecondPoint.x)/1,abs(m_FirstPoint.y-m_SecondPoint.y)/1);
if(rect.PtInRect(lpoint))
{
m_FoundPoint=lpoint;
return 1;
}
lpoint=CPoint(m_SecondPoint.x,m_FirstPoint.y);
// lpoint.Offset(-abs(m_FirstPoint.x-m_SecondPoint.x)/1,abs(m_FirstPoint.y-m_SecondPoint.y)/1);
if(rect.PtInRect(lpoint))
{
m_FoundPoint=lpoint;
return 2;
}
lpoint=m_SecondPoint;
//lpoint.Offset(-abs(m_FirstPoint.x-m_SecondPoint.x)/1,-abs(m_FirstPoint.y-m_SecondPoint.y)/1);
if(rect.PtInRect(lpoint))
{
m_FoundPoint=lpoint;
return 3;
}
lpoint=CPoint(m_FirstPoint.x,m_SecondPoint.y);
//lpoint.Offset(abs(m_FirstPoint.x-m_SecondPoint.x)/1,-abs(m_FirstPoint.y-m_SecondPoint.y)/1);
if(rect.PtInRect(lpoint))
{
m_FoundPoint=lpoint;
return 4;
}
if(rect.PtInRect(CPoint((m_FirstPoint.x+m_SecondPoint.x)/2,(m_FirstPoint.y+m_SecondPoint.y)/2)))
{
m_FoundPoint=CPoint((m_FirstPoint.x+m_SecondPoint.x)/2,(m_FirstPoint.y+m_SecondPoint.y)/2);
return 5;
}
return 0;
}
void CRoundRectangle::ShowSelectPoint(CDC *pDC)
{
CRect rect;
CBrush brush;
brush.CreateSolidBrush(RGB(0,0,255));
CPen m_pen;
m_pen.CreatePen(PS_SOLID,1,RGB(0,0,255));
CPen *OldPen=pDC->SelectObject(&m_pen);
int oldBkMode=pDC->SetBkMode(OPAQUE);
CBrush *OldBrush=pDC->SelectObject(&brush);
int oldDrawingMode=pDC->SetROP2(R2_NOTXORPEN);
CPoint lpoint=m_FirstPoint;
//lpoint.Offset(abs(m_FirstPoint.x-m_SecondPoint.x)/1,abs(m_FirstPoint.y-m_SecondPoint.y)/1);
rect.SetRect(lpoint,lpoint);
rect.InflateRect(3,3);
pDC->Rectangle(rect);
lpoint=CPoint(m_SecondPoint.x,m_FirstPoint.y);
// lpoint.Offset(-abs(m_FirstPoint.x-m_SecondPoint.x)/1,abs(m_FirstPoint.y-m_SecondPoint.y)/1);
rect.SetRect(lpoint,lpoint);
rect.InflateRect(3,3);
pDC->Rectangle(rect);
lpoint=m_SecondPoint;
//lpoint.Offset(-abs(m_FirstPoint.x-m_SecondPoint.x)/1,-abs(m_FirstPoint.y-m_SecondPoint.y)/1);
rect.SetRect(lpoint,lpoint);
rect.InflateRect(3,3);
pDC->Rectangle(rect);
lpoint=CPoint(m_FirstPoint.x,m_SecondPoint.y);
///lpoint.Offset(abs(m_FirstPoint.x-m_SecondPoint.x)/1,-abs(m_FirstPoint.y-m_SecondPoint.y)/1);
rect.SetRect(lpoint,lpoint);
rect.InflateRect(3,3);
pDC->Rectangle(rect);
pDC->SelectObject(OldBrush);
brush.DeleteObject();
brush.CreateSolidBrush(RGB(255,0,0));
pDC->SelectObject(&brush);
lpoint=CPoint((m_FirstPoint.x+m_SecondPoint.x)/2,(m_FirstPoint.y+m_SecondPoint.y)/2);
rect.SetRect(lpoint,lpoint);
rect.InflateRect(3,3);
pDC->Rectangle(rect);
pDC->SelectObject(OldPen);
pDC->SetBkMode(oldBkMode);
pDC->SelectObject(OldBrush);
pDC->SetROP2(oldDrawingMode);
}
void CRoundRectangle::DrawActive(CDC *pDC,CPoint point)
{
CPen m_pen;
CBrush m_brush;
m_pen.CreatePen(m_PenStyle,m_PenWidth,m_PenColor);
CPen* pen=(CPen*)pDC->SelectObject(&m_pen);
LOGBRUSH brushlog;
brushlog.lbColor=m_BrushColor;
brushlog.lbHatch=m_BrushHatch;
brushlog.lbStyle=m_BrushStyle;
m_brush.CreateBrushIndirect(&brushlog);
SetBrushOrg(pDC,&m_brush);
CBrush*brush=(CBrush*)pDC->SelectObject(&m_brush);
int OldBkMode=pDC->SetBkMode(m_BkMode);
COLORREF OldColor=pDC->SetBkColor(m_BackgroundColor);
pDC->RoundRect(CRect(m_FirstPoint,m_SecondPoint),CPoint(abs(m_FirstPoint.x-m_SecondPoint.x)/3,abs(m_FirstPoint.y-m_SecondPoint.y)/3));
pDC->SelectObject(brush);
pDC->SelectObject(pen);
pDC->SetBkMode(OldBkMode);
pDC->SetBkColor(OldColor);
}
void CRoundRectangle::OnLButtonDown(CDC *pDC, CEastDrawView *pView, CPoint point)
{
if(m_HaveFindFirst)
{
pView->L_iPointCount=IsOnMarginPoint(point);
if(pView->L_iPointCount!=0)
{
pView->m_bHaveFindSecond=true;
pView->m_CurrentDrawTool=RoundRectangle_Tool;
pView->m_CurrentDrawStatus=Change_Status;
if(pView->L_iPointCount==1)
{
pView->m_FirstPoint=m_SecondPoint;
pView->m_SecondPoint=point;
}
if(pView->L_iPointCount==2)
{
pView->m_FirstPoint=CPoint(m_FirstPoint.x,m_SecondPoint.y);
pView->m_SecondPoint=point;
}
if(pView->L_iPointCount==3)
{
pView->m_FirstPoint=m_FirstPoint;
pView->m_SecondPoint=point;
}
if(pView->L_iPointCount==4)
{
pView->m_FirstPoint=CPoint(m_SecondPoint.x,m_FirstPoint.y);
pView->m_SecondPoint=point;
}
if(pView->L_iPointCount==5)
{
pView->m_FirstPoint=m_FirstPoint;
pView->m_SecondPoint=m_SecondPoint;
pView->m_CurrentDrawTool=RoundRectangle_Tool;
pView->m_CurrentDrawStatus=Drag_Status;
}
}//******if(L_iPointCount!=0)
}//******if(L_pRoundRectangle->m_HaveFindFirst)
if((!pView->m_bHaveFindSecond)&&IsInRgn(point))
{
if(!m_HaveFindFirst)
{
m_HaveFindFirst=true;
pView->m_bHaveFindFirst=true;
ShowSelectPoint(pDC);
}
else
{
m_HaveFindFirst=false;
pView->m_bHaveFindFirst=true;
ShowSelectPoint(pDC);
}
}
if(pView->m_bHaveFindSecond)
{
pView->m_pCurrentUnit=this;
ShowSelectPoint(pDC);
m_DrawingMode=pDC->GetROP2();
DrawStatic(pDC);
DrawOldReferencePoint(pDC,m_FoundPoint);
}
}
void CRoundRectangle::OnMouseMove(CDC *pDC, CEastDrawView *pView, CPoint point)
{
if(pView->m_CurrentDrawStatus==Drag_Status)
{
m_FirstPoint.Offset(pView->m_SecondPoint.x-pView->m_FirstPoint.x,pView->m_SecondPoint.y-pView->m_FirstPoint.y);
m_SecondPoint.Offset(pView->m_SecondPoint.x-pView->m_FirstPoint.x,pView->m_SecondPoint.y-pView->m_FirstPoint.y);
}
else
{
this->DrawActive(pDC,point);
pView->m_SecondPoint=point;
m_SecondPoint=pView->m_SecondPoint;
this->DrawActive(pDC,point);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -