橡皮区矩形 CRectTracker C# 实现

2016-01-29 11:56 147 1 收藏

橡皮区矩形 CRectTracker C# 实现,橡皮区矩形 CRectTracker C# 实现

【 tulaoshi.com - C语言心得技巧 】

橡皮区矩形 CRectTracker C# 实现


作者:fanjunxing

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

下载源代码


本文要求读者熟悉 C#

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

测试环境:Windows 2000

更新记录:2004.4.7 第一次更新

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

功能介绍:
  在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 worksif (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 effectmyDoc.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;     }     ...}
结束。

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

来源:https://www.tulaoshi.com/n/20160129/1483939.html

延伸阅读
Singleton模式 Singleton(译为单件或单态)模式是设计模式中比较简单而常用的模式。 有些时候在整个应用程序中,会要求某个类有且只有一个实例,这个时候可以采用Singleton模式进行设计。用Singleton模式设计的类不仅能保证在应用中只有一个实例,而且提供了一种非全局变量的方法进行全局访问,称为全局访问点,这样对于没有全...
在.Net 中 DataGrid 虽然有排序的功能,但并不支持双向的排序。用到了,看了些相关的帖子,自己尝试了一种方法,竟然也行得通,主要是用DataGrid.Attributes 存了一个参数,同时在onSortCommand中修改了DataGridColumn的SortExpression. 代码如下: private void BindData(){ DataTable dt = .......; if(dt != null) { DataVi...
现在有很多网络管理软件都具备网络上信息实时传送的功能,虽然有些网络通讯软件功能比较强大,有的软件不仅可以传送文本信息,还可以传送二进制文件等。但它们都有一个无法克服的缺点,那就是分发比较困难,信息传送双方计算机都需要安装通讯软件的客户端和服务器端软件,并且只有但双方都打开相应软件时,才可能进行信息传送。而信使通讯...
最近经朋友介绍开始玩 密传 网络游戏 升级升级,突然觉得太费键盘,于是自己用C#写了一个程序,想代替我的操作,自己去打怪物,自己升级 用这个东西升了好多级了,现在把源码贴出来,和大家共享,欢迎大家批评指正,感激不尽。 程序大概分成两个部分,一个部分是类库,一个是应用程序 大概的思路就是找到游戏进程的主窗口句柄,然后发送游戏...
本文给出一个用 C# 编程实现 读写 Binary 的实例代码,对于初学者来说是个不可多得的参考性文章…… 以下是引用片段: //返回blob数据 public MemoryStream getBlob(string SQL) ...{ try ...{ Db_Conn(); cmd = new OleDbCommand(SQL, Conn); cmd.Comma...

经验教程

49

收藏

19
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部