加载中…
个人资料
高恩阳
高恩阳
  • 博客等级:
  • 博客积分:0
  • 博客访问:120,738
  • 关注人气:38
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

我是怎样用CRectTracker画矩形的。

(2013-09-25 18:01:48)
分类: 电子元件识别记录

第一步:在视类的头文件中定义

CPoint m_LButtonDown_LastPoint;

CRectTracker m_RectTracker;
bool m_IsChosen;

第二步:在视类的cpp文件中的构造函数中:

m_RectTracker.m_rect.SetRect(0,0,1,1);//设置矩形区域大小
m_RectTracker.m_nStyle=CRectTracker::dottedLine|CRectTracker::resizeInside;
m_IsChosen=FALSE;//表示未选中

第三步:在视类的cpp文件中的OnLButtonDown中

m_LButtonDown_LastPoint=point;
 if(m_RectTracker.HitTest(point)<0)
 {
  CRectTracker tempRectTracker;
  CRect rect;
  tempRectTracker.TrackRubberBand(this,point);
  tempRectTracker.m_rect.NormalizeRect();
  if(rect.IntersectRect(tempRectTracker.m_rect,m_RectTracker.m_rect))
   m_IsChosen=TRUE;
  else
   m_IsChosen=FALSE;
  Invalidate();
 }
 else
 {
  CClientDC dc(this);
  m_RectTracker.Draw(&dc);
  m_RectTracker.Track(this,point);
  m_IsChosen=TRUE;
  Invalidate();
 }

 this->SendMessage(WM_LBUTTONUP,NULL,NULL);//这句话重要啊!

第四步:在视类的cpp文件中的OnLButtonUp中

CPoint Mypoint;
 GetCursorPos(&Mypoint);
 ScreenToClient(&Mypoint); //这句话重要啊,没他可不行。

 RedrawWindow();//这句话一锤定音!没这句话,后面的东西都画不出来!
 CDC *pDC;
 pDC=GetDC();
 
 CPoint pointA,pointB;
 pointA.x=m_LButtonDown_LastPoint.x;
 pointA.y=Mypoint.y;
 pointB.x=Mypoint.x;
 pointB.y=m_LButtonDown_LastPoint.y;

 
 pDC->MoveTo(m_LButtonDown_LastPoint);
 pDC->LineTo(pointB);

 pDC->MoveTo(pointB); 
 pDC->LineTo(Mypoint);
 
 pDC->MoveTo(Mypoint);
 pDC->LineTo(pointA);

 pDC->MoveTo(pointA); 
 pDC->LineTo(m_LButtonDown_LastPoint);

 

嘿嘿,好使了!

 

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有