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()
public virtual int HitTest(Point point)
继承类使用虚拟的
protected override bool PointInObject(Point point)
protected override bool PointInObject(Point point)
public virtual void SaveToStream(SerializationInfo info, int orderNumber)
public virtual void LoadFromStream(SerializationInfo info, int orderNumber)
这些函数在每一个继承类中都实现了。二进制文件有以下格式:
这样就可以在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)
原文: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)
相关文章推荐
- DrawTools(画图工具) From CodeProject
- CodeProject - DrawTools(画图工具)
- CodeProject - DrawTools(画图工具)
- DrawTools(画图工具) From CodeProject
- DrawTools(画图工具)原始版本
- VS2012中自定义工具“MyApplicationCodeGenerator”与文件“My Project\Application.myapp”相关联,但在项目中找不到该自定义工具的输出
- Moc'ing qt1.h... 系统找不到指定的路径。 Project : error PRJ0019: 工具从"Moc'ing qt1.h..."
- Android Project from Existing Code 生成 R 文件错误、失败等问题解决办法 - 持续更新
- Jupiter Code Review Reference -- Jupiter代码审查工具使用参考 (修改版)
- 1>Project : error PRJ0019: 某个工具从以下位置返回了错误代码: "Moc'ing thread.h
- codeproject上发现的DataSet调试利器
- VIM之Project 项目管理工具
- react native 开发工具vscode
- 1.1.5-学习Opencv与MFC混合编程之---画图工具 输入文字和填充图像 修改光标
- 基于HTML5 Canvas和jQuery的画图工具的实现
- [CodeProject每日一荐] 藏东西系列:在图片中隐藏信息
- 手把手教你写高质量Android技术博客,画图工具,录像工具,Markdown写法
- 新一代跨平台C++开发工具Code::Blocks简介
- Collision Detection Model, google code project
- 从CodeProject那里找到并且剥离出来的一个Trace Log类