C# 电子白板软件开发
给大家介绍两个 C#
电子白板软件开源项目,其中一个是基于 WinForm
平台开发的,另一个是基于 WPF
平台开发的。这两个项目实现的功能类似,最初都是由 Alex Farber
发布在 CodeProject
开源平台之上的,其中 WinForm 版本发布于 2005 年,WPF 版本发布于 2008 年。遗憾的是这两个原始项目都已经从 CodeProject 移除了,好在 Mark Miller
扩展后的 WinForm 版本还能找到,但是 WPF 版本是彻底没了。幸好我之前下载并保存了 WPF 版本,今天一并分享出来,与 C# 初学者一同交流学习。
两个项目都实现了 书写
、基本图形绘制
、属性编辑
、撤销重做
、文件保存
等基础功能。其中, 经过 Mark Miller
优化后的 WinForm 版本还实现了图形旋转
、画布旋转与漫游
、图层(多页)
等功能。项目中采用了面向对象的开发思维,也有一些实际项目经验的体现,值得初学者深入学习。
WinForm.DrawTools
使用 GDI+
实现的图形的呈现,核心组件是 DrawArea
用户控件(UserControl),在该控件的 Paint
事件中进行的图形的绘制。DrawObject
是所有图形的基类,其中的 Draw(Graphics g)
虚方法由子类重写,以决定呈现的内容。
基本功能
- 文档操作:
- 新建
- 保存(另存为)
- 打开
- 导出为图片
- 最近文档记录
- 图形绘制:
- 画笔书写
- 矩形
- 椭圆
- 直线
- 连接线
- 多边形
- 图片
- 文本
- 图形编辑:
- 线条粗细
- 画笔颜色
- 旋转
- 基本操作:
- 全选
- 取消全选
- 删除选中的图形
- 删除所有的图形
- 撤销
- 重做
- 页面(层)操作:
- 旋转
- 缩放
- 漫游
- 添加
- 删除
- 切换
主要代码模块
- DocToolkit:文档相关功能
- DocManager:文档的保存与打开
- DragDropManager:文档拖拽打开
- MruManager:记录最近编辑的文档
- PersistWindowState:记录窗体状态
- DrawTools
- DrawArea:画板,接受鼠标输入,呈现形状
- DrawObject:形状的基类
- GraphicsList:单页形状的呈现与管理
- Layers:页面管理
- Command:全选、删除等命令
WPF.DrawTools
基于 DrawingVisual
实现的图形的呈现,核心组件是继承自 Canvas
的 DrawingCanvas
自定义控件,该控件用于承载所有的图形以及接收用户输入。GraphicsBase
是所有图形的基类,其中的 Draw(DrawingContext drawingContext)
虚方法用于决定图形的内容。
功能方面比 WinForm 版本少一些,但是基础功能还是齐全的,只是缺少页面相关的功能(这部分是由 Mark Miller 扩展的)。代码方面比 WinForm 版本优化不少,架构的设计、模块的划分、代码的结构更加清晰。
代码结构图
- Commands
- Graphics
- Tools
源码获取
原始项目已经从 CodeProject 上删除了,扩展后的 WinForm 项目还能搜到,但是 CodeProject 上的 WPF 项目彻底没了。我收藏了两个版本的源码,可以前往下载:
如果想了解原始项目的相关扩展,可访问:
如果源码有疑问,可以留言交流。