现在的位置: 首页 > 综合 > 正文

MyTracker类使用例子

2012年10月29日 ⁄ 综合 ⁄ 共 2791字 ⁄ 字号 评论关闭

// RectTrackerView.cpp : CRectTrackerView 类的实现
//

#include "stdafx.h"
#include "RectTracker.h"

#include "RectTrackerDoc.h"
#include "RectTrackerView.h"
#include "./recttrackerview.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CRectTrackerView

IMPLEMENT_DYNCREATE(CRectTrackerView, CView)

BEGIN_MESSAGE_MAP(CRectTrackerView, CView)
 // 标准打印命令
 ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
 ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
 ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
 ON_COMMAND(ID_RECTTRACKER, OnRecttracker)
 ON_WM_LBUTTONDOWN()
 ON_WM_SETCURSOR()
END_MESSAGE_MAP()

// CRectTrackerView 构造/析构

CRectTrackerView::CRectTrackerView()
{
 m_IsDraw = FALSE;
 
 m_tracker.m_nStyle=CRectTracker::resizeInside|CRectTracker::dottedLine;

    m_tracker.m_sizeMin.cx=20;
 m_tracker.m_sizeMin.cy=20;

}

CRectTrackerView::~CRectTrackerView()
{
}

BOOL CRectTrackerView::PreCreateWindow(CREATESTRUCT& cs)
{
 // TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
 // 样式

 return CView::PreCreateWindow(cs);
}

// CRectTrackerView 绘制

void CRectTrackerView::OnDraw(CDC *pDC)
{
 CRectTrackerDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 if (!pDoc)
  return;

 /*CDC MemDC;
 CBitmap MemBitmap;
 
 MemDC.CreateCompatibleDC(NULL);
 MemBitmap.CreateCompatibleBitmap(pDC,1200,1200);
 CBitmap *pOldBit = MemDC.SelectObject(&MemBitmap);
 MemDC.FillSolidRect(0,0,1200,1200,RGB(255,255,255));
 pDC->BitBlt(0,0,1200,1200,&MemDC,0,0,SRCCOPY);*/

 CPen pen;
 pen.CreatePen(PS_DOT,1,RGB(255,0,0));
 if(m_IsDraw)
  m_tracker.Draw(pDC,&pen);

 /*MemBitmap.DeleteObject();
 MemDC.DeleteDC();*/
}

// CRectTrackerView 打印

BOOL CRectTrackerView::OnPreparePrinting(CPrintInfo* pInfo)
{
 // 默认准备
 return DoPreparePrinting(pInfo);
}

void CRectTrackerView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
 // TODO: 打印前添加额外的初始化
}

void CRectTrackerView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
 // TODO: 打印后添加清除过程
}

// CRectTrackerView 诊断

#ifdef _DEBUG
void CRectTrackerView::AssertValid() const
{
 CView::AssertValid();
}

void CRectTrackerView::Dump(CDumpContext& dc) const
{
 CView::Dump(dc);
}

CRectTrackerDoc* CRectTrackerView::GetDocument() const // 非调试版本是内联的
{
 ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CRectTrackerDoc)));
 return (CRectTrackerDoc*)m_pDocument;
}
#endif //_DEBUG

// CRectTrackerView 消息处理程序

void CRectTrackerView::OnRecttracker()
{
 m_tracker.m_nHandleSize = 6;
    m_IsDraw = TRUE;
}

void CRectTrackerView::OnLButtonDown(UINT nFlags, CPoint point)
{
  if(m_IsDraw )//矩形橡皮框
 {
  BOOL bResult = m_tracker.HitTest (point) != CRectTracker::hitNothing; 
  if (bResult)
  {
   m_tracker.Track (this,point,TRUE);
      Invalidate();
  }
  else
     m_tracker.TrackRubberBand (this,point,TRUE);
 }

 CView::OnLButtonDown(nFlags, point);
}

BOOL CRectTrackerView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
 if(m_IsDraw)
   {
     SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW)); 
     if(m_tracker.SetCursor(pWnd,nHitTest))
     return TRUE;
   }
 return CView::OnSetCursor(pWnd, nHitTest, message);
}

 

抱歉!评论已关闭.