get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是CRectTracker C# 实现橡皮区矩形,一起来学习了解下吧!
【 tulaoshi.com - 编程语言 】
本文要求读者熟悉 C#
开发环境: Visual Studio .NET 2003 Windows 2000
测试环境:Windows 2000
更新记录:2004.4.7 第一次更新
(本文来源于图老师网站,更多请访问http://www.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类里面
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)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; } ...}
结束。
本文示例代码或素材下载
来源:http://www.tulaoshi.com/n/20160219/1614422.html
看过《CRectTracker C# 实现橡皮区矩形》的人还看了以下文章 更多>>