?? pointobj.cpp
字號:
#include "StdAfx.h"
#include ".\pointobj.h"
#include "visdrawview.h"
#include "visdrawdoc.h"
IMPLEMENT_SERIAL(CPointObj, CFigureObj, 0)
CPointObj::CPointObj(void)
{
}
CPointObj::~CPointObj(void)
{
}
CPointObj::CPointObj(const CRect& position)
: CFigureObj(position)
{
ASSERT_VALID(this);
m_pointx = 0.0;
m_pointy = 0.0;
}
void CPointObj::Draw(CVisDrawView* pView, CDC* pDC)
{
ASSERT_VALID(this);
CBrush brush;
if (!brush.CreateBrushIndirect(&m_logbrush))
return;
CPen pen;
if (!pen.CreatePenIndirect(&m_logpen))
return;
CBrush* pOldBrush;
CPen* pOldPen;
if (m_bBrush)
else
pOldBrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
if (m_bPen)
pOldPen = pDC->SelectObject(&pen);
else
pOldPen = (CPen*)pDC->SelectStockObject(NULL_PEN);
//把點的世界坐標轉化為邏輯坐標
CPoint nPoint;
pView->WorldToClient(nPoint,m_pointx,m_pointy);
pDC->SetPixel(nPoint.x,nPoint.y,m_logpen.lopnColor);
pDC->SelectObject(pOldBrush);
pDC->SelectObject(pOldPen);
}
void CPointObj::Serialize(CArchive& ar)
{
ASSERT_VALID(this);
//調用基類串行化
CFigureObj::Serialize(ar);
if (ar.IsStoring())
{
ar << m_pointx << m_pointy;
}
else
{
ar >> m_pointx >> m_pointy;
}
}
void CPointObj::SetPoint(double pointx, double pointy)
{
m_pointx = pointx;
m_pointy = pointy;
}
void CPointObj::GetPoint(double& pointx, double& pointy)
{
pointx = m_pointx;
pointy = m_pointy;
}
//計算外接矩形,以邏輯坐標表示
CRect CPointObj::CalcBounds(CVisDrawView* pView)
{
CPoint nPoint;
pView->WorldToClient(nPoint,m_pointx,m_pointy);
m_position = CRect(nPoint, CSize(1, 1));
return m_position;
}
//圖元拾取判斷函數
BOOL CPointObj::IsSelected(CVisDrawView* pView, const CPoint& point)
{
//參數point是鼠標的邏輯坐標
int distance, nSelectDistance;
CPoint local;
local = point;
//鼠標點的設備坐標
pView->DocToClient(local);
//識別精度值
nSelectDistance = pView->GetDocument()->GetSetectDistance()/2;
CPoint pt;
//把點的坐標轉化為邏輯坐標
pView->WorldToClient(pt, m_pointx, m_pointy);
//把點的坐標由邏輯坐標轉化為設備坐標
pView->DocToClient(pt);
//計算鼠標點point與點pt之間的像素距離
distance = (int)PointToPoint(pt,local);
//根據拾取條件判斷圖元是否被拾取
return (distance < nSelectDistance);
}
//返回手柄個數
int CPointObj::GetHandleCount()
{
ASSERT_VALID(this);
return 1;
}
// 返回手柄中心邏輯坐標
CPoint CPointObj::GetHandle(CVisDrawView* pView, int nHandle)
{
ASSERT_VALID(this);
return CFigureObj::GetHandle(pView, nHandle);
}
// delta為邏輯坐標
void CPointObj::MoveTo(CPoint delta, CVisDrawView* pView)
{
ASSERT_VALID(this);
//把delta轉化為世界坐標
double pointx,pointy;
pointx = pView->ClientToWorld(delta.x);
pointy = -pView->ClientToWorld(delta.y);
//修改點坐標
m_pointx += pointx;
m_pointy += pointy;
//重新計算邊界矩形
CalcBounds(pView);
//修改文檔標志
m_pDocument->SetModifiedFlag();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -