CRectTracker C# 实现橡皮区矩形

GA6115

GA6115

2016-02-19 17:10

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是CRectTracker C# 实现橡皮区矩形,一起来学习了解下吧!

  本文要求读者熟悉 C#

  开发环境: Visual Studio .NET 2003 Windows 2000

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  测试环境:Windows 2000

  更新记录:2004.4.7 第一次更新

  使用许可:代码是否免费使用

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  功能介绍:

  在MFC中CRectTracker是一个很有用的类,可最近学习C#时,发现没有,于是就从MFC转换了一个供大家享用。

  使用该类比较简单,几乎和 MFC中 的 CRectTracker 一样,在MDI中:

public class CReportDoc{  ...public CRectTracker m_tracker=null;  public CReportDoc(MainWindow mainWin)  {   ...    m_tracker=new CRectTracker();    m_tracker.m_rect.X = 10;    m_tracker.m_rect.Y = 10;    m_tracker.m_rect.Width = 91;    m_tracker.m_rect.Height = 91;    ...  }  ...}   

  相应的在VIEW类里面

public class CReportView : System.Windows.Forms.Form{   ...   private void InitializeComponent()   {  ...  this.MouseDown +=  new System.Windows.Forms.MouseEventHandler(this.CReportView_MouseDown);  this.Paint +=  new System.Windows.Forms.PaintEventHandler(this.PaintHandler);  // 因为C#中不支持OnSetCursor所以只好用MouseMove替代了,  // 各位兄台还有更好的方法,请告之  this.MouseMove+=new MouseEventHandler(CReportView_MouseMove);   }   private void PaintHandler(Object sender, PaintEventArgs e)   {  Graphics gs=e.Graphics;  //其余的画图代码  myDoc.m_tracker.OnDraw(gs);   }   private void CReportView_MouseDown(object sender,                  MouseEventArgs e)   {   if(e.Button==MouseButtons .Left)   {  Rectangle rectSave=new Rectangle();  Point pt=new Point(e.X,e.Y);  myDoc.m_tracker.GetTrueRect(ref rectSave);  if (myDoc.m_tracker.HitTest(pt)  0)  { // just to demonstrate CRectTracker::TrackRubberBand    CRectTracker tracker=new CRectTracker();    if (tracker.TrackRubberBand(this,                  pt,          myDoc.m_bAllowInvert))    {  // see if rubber band intersects with the doc''s tracker      tracker.NormalizeRect(ref tracker.m_rect);      // so intersect rect works      if (tracker.m_rect.IntersectsWith(myDoc.m_tracker.m_rect))      { // if so, put resize handles on it (ie. select it)        if ((myDoc.m_tracker.m_nStyle &           CRectTracker.StyleFlags.resizeInside)!=0)        {  // swap from resize inside to          // resize outside for effect          myDoc.m_tracker.m_nStyle &=          ~CRectTracker.StyleFlags.resizeInside;          myDoc.m_tracker.m_nStyle |=          CRectTracker.StyleFlags.resizeOutside;        }        else        {// just use inside resize handles on first time          myDoc.m_tracker.m_nStyle &=           ~CRectTracker.StyleFlags.resizeOutside;          myDoc.m_tracker.m_nStyle |=             CRectTracker.StyleFlags.resizeInside;        }      }    }    myDoc.UpdateAllViews(null);     }  }  else  {    if (myDoc.m_tracker.Track(this,     pt,       myDoc.m_bAllowInvert,null))    {     // normal tracking action, when tracker is "hit"    myDoc.UpdateAllViews(null);    }  }   }   private void CReportView_MouseMove(object sender, MouseEventArgs e)   {  Point mousept=new Point(e.X,e.Y);  if(!myDoc.m_tracker.SetCursor(this,0,mousept))  this.Cursor=Cursors.Arrow;   }   ...}

  结束。

本文示例代码或素材下载

展开更多 50%)
分享

猜你喜欢

橡皮区矩形 CRectTracker C# 实现

C语言教程 C语言函数
橡皮区矩形 CRectTracker C# 实现

CRectTracker C# 实现橡皮区矩形

编程语言 网络编程
CRectTracker C# 实现橡皮区矩形

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

用C#实现在客户区拖动窗体(转自MSDN)

电脑网络
用C#实现在客户区拖动窗体(转自MSDN)

LZW算法的 C#实现

电脑网络
LZW算法的 C#实现

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用C#实现语音技术

编程语言 网络编程
用C#实现语音技术

缓存类的实现(C#)

电脑网络
缓存类的实现(C#)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

网站繁简转换解决方案--ASP,JSP,PHP,.Net通用

网站繁简转换解决方案--ASP,JSP,PHP,.Net通用

C#进阶教程(九)

C#进阶教程(九)
下拉加载更多内容 ↓