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 專案徹底沒了。我收藏了兩個版本的原始碼,可以前往下載:
如果想了解原始專案的相關擴充套件,可訪問:
如果原始碼有疑問,可以留言交流。