当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 橡皮区矩形 CRectTracker C# 实现

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 橡皮区矩形 CRectTracker C# 实现


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 88 ::
收藏到网摘: n/a

橡皮区矩形 CRectTracker C# 实现


作者:fanjunxing

下载源代码


本文要求读者熟悉 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 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; } ...}
结束。