您的位置:首页 > 其它

CodeProject - DrawTools(画图工具)

2007-03-17 14:07 309 查看
原作者:Alex Farber
原文:http://www.codeproject.com/csharp/DrawTools.asp(源代码请参见原文)

private void Form1_Load(object sender, System.EventArgs e)

private void Application_Idle(object sender, EventArgs e)

public void SetStateOfControls()

// Rectangle tool is selected
private void CommandRectangle()

Hit Test

DrawObject
类有一个叫
HitTest
的虚拟函数,用来侦测是否Point属于图形对象。

public virtual int HitTest(Point point)

继承类使用虚拟的
PointInObject
来做点击测试。这个函数调用自
HitTest
DrawRectangle
类使用了一种简单的方法实现了这个函数:

protected override bool PointInObject(Point point)

DrawLine
对这个函数的实现更加复杂:

protected override bool PointInObject(Point point)

DrawPolygon
函数使用了同样的方法,但是
AreaPath
包含了多边形的所有线。



序列化

GraphicList
类实现了
ISerializable
接口,这个接口用作类对象的二进制序列化。
DrawObject
类有两个虚函数用来做序列化。

public virtual void SaveToStream(SerializationInfo info, int orderNumber)

public virtual void LoadFromStream(SerializationInfo info, int orderNumber)

这些函数在每一个继承类中都实现了。二进制文件有以下格式:

Number of objects

Type name

Object

Type name

Object

...

Type name

Object

这样就可以在GraphicList类里写普通的序列化代码,而不需要了解序列化对象的任何细节。

private const string entryCount = "Count";
private const string entryType = "Type";

// Save list to stream
[SecurityPermissionAttribute(SecurityAction.Demand,
SerializationFormatter=true)]
public virtual void GetObjectData(SerializationInfo info,
StreamingContext context)

// Load from stream
protected GraphicsList(SerializationInfo info, StreamingContext context)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: