C# 电子白板软件开发
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 项目彻底没了。我收藏了两个版本的源码,可以前往下载:
- C# 电子白板软件源码(WinForm & WPF)
如果想了解原始项目的相关扩展,可访问:
- Extensions to DrawTools
- DrawTools 2014
- DrawTools
如果源码有疑问,可以留言交流。
C# 电子白板软件开发相关推荐
- 用JAVA编制电子白板软件
用JAVA编制电子白板软件 用JAVA编制电子白板软件 ----随着 Internet的迅速发展,在Email.WWW.FTP等传统的非实时应用日趋成熟的同时,广大网络用户对在线实时交流的需求不断扩大 ...
- 【软件工程】RUP与软件开发5大模型
软件开发的5大模型 1.瀑布模型:按照人的思维一步一步的开发下去,如果需求分析得当,每个阶段顺利,结果还不错! 2.快速原型模型:后来人们发现,自己不可能一下子就把所有的需求搞清楚,总是在开发的过程中 ...
- 【快速上手mac必备】常用优质mac软件推荐(音视频、办公、软件开发、辅助工具、系统管理、云存储)
本文章的主要内容是我作为一名大四学生.准程序员.up主这三种身份来给大家推荐一下 mac 上好用的软件以及工具.本人也是从去年9月份开始从windows阵营转移到了mac阵营,刚开始使用的时候,也曾主 ...
- 一则android软件开发工程师的招聘信息
岗位职责: 从事Android平台的客户端软件开发 任职资格: 1.一年以上Android平台开发经验: 2.两年以上Java开发经验: 3.熟悉Android开发架构和API调用: 4.熟悉HTTP ...
- ubuntu14.04如何在线安装eclipse以及C/C++开发组件,搭建软件开发平台
在ubuntu14.04操作系统中进行C/C++软件开发,需要安装eclipse以及CDT等各种组件,下载安装包一一安装,之后再进行各种配置可能比较麻烦,在这里推荐一种在线安装方式,安装配置较为方便. ...
- (广州)软件开发定制服务,工作流引擎 OA 库存管理系统
本人专注于工作流的研究设计同时提供软件开发定制服务,工作流引擎 OA系统 库存管理系统 如果有机会合作共事请联系:15817167503(本人在广州) QQ:1311663711 加时请注明软件定制 ...
- 每个程序员必看:如何在40岁后继续做软件开发?
导读: 这是一个 42 岁的开发者所写经验分享文章.并且列出一些他 18 年多身为软件开发者的经验谈.许多部分看完后都会希望自己当时就能够了解,所以很推荐不论是新手或是老手都要好好阅读这一篇文章. 故 ...
- 为什么Scrum模式适合软件开发?
2019独角兽企业重金招聘Python工程师标准>>> 摘自基于Visual Studio 2010 进行敏捷/Scrum模式开发 软件行业至今已经有超过40年的历史,很多在软件工程 ...
- 【转载】有软件开发,就要有软件测试!
移动app市场很大且还在不断发展.有多大呢?两个最流行的移动平台,iOS和Android,为我们提供了一些数据: ▪▪ 1,250,000个可供下载的 app(去年增长了85%) ▪▪ 63,000个 ...
- 软件开发面试_如何为成功的软件开发工作面试做准备
软件开发面试 Job interviews are stressful for many people. Besides the pressure of getting hired, you have ...
最新文章
- map和foreach的区别和应用场景_浅析项目中常用的 VO、DTO、DO、PO的概念、区别和用处...
- jdbc oracle添加数据库连接,JDBC与Oracle数据库连接最常用方法
- 梯度下降法参数更新公式的推导
- Spring MVC学习笔记——SiteMesh的使用(转)
- 动态扩容Linux根目录 (解决/dev/mapper/centos-root 占用了过高问题)
- 极客大学架构师训练营 系统架构 消息队列 负载均衡 数据库备份 第10课 听课总结
- 机器学习,斯坦福公开课
- 干货流出|腾讯内部几近满分的项目管理课程PPT
- 机器学习、数据挖掘、神经网络、人工智能和模式识别之间,主要是什么关系
- CMMI 项目计划实战
- PTA---计算天数
- free源码分析---2
- c语言父进程创建孙进程,进程的创建与并发的执行-带答案版.doc
- 在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 7939(unattended-upgr)持有... 32秒
- 一张图读懂一个产业短视频第6期
- 一种繁体ppt转换简体的方法(简转繁同样适用)
- pgsql 使用技巧
- Android 常用图片框架对比
- Android返回上一页面的方式
- Visual Studio 2010已安装,sql server 2008 management studio安装教程
热门文章
- win10cmd重置系统_win10怎么重置电脑 win10重置此电脑的方法【图文】
- Java后台开发常用工具集合
- 程序猿必备的数电知识,快来看看你掌握多少!(建议收藏)
- newifi3 高恪魔改_原地升值?newifi 3 路由器刷入高恪固件教程
- 无法加载oracle驱动程序998,无法加载oracle in oradb10g_home2 odbc驱动程序的安装例程,因为存在系统错误代码998 解决方法...
- html字体及文本样式设置
- AutoCAD2010图边框图.LSP与.DGW文件该放在哪才能正确生成想要的图框
- Linux-nmap命令使用
- IMO FTPC Part 3-A、B和F级分隔耐火性能测试
- Python爬虫基本代码附解析