1. 程式人生 > >C# 電子白板軟體開發

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) 虛方法由子類重寫,以決定呈現的內容。

基本功能

  1. 文件操作:
    • 新建
    • 儲存(另存為)
    • 開啟
    • 匯出為圖片
    • 最近文件記錄
  2. 圖形繪製:
    • 畫筆書寫
    • 矩形
    • 橢圓
    • 直線
    • 連線線
    • 多邊形
    • 圖片
    • 文字
  3. 圖形編輯:
    • 線條粗細
    • 畫筆顏色
    • 旋轉
  4. 基本操作:
    • 全選
    • 取消全選
    • 刪除選中的圖形
    • 刪除所有的圖形
    • 撤銷
    • 重做
  5. 頁面(層)操作:
    • 旋轉
    • 縮放
    • 漫遊
    • 新增
    • 刪除
    • 切換

主要程式碼模組

  • DocToolkit:文件相關功能
    • DocManager:文件的儲存與開啟
    • DragDropManager:文件拖拽開啟
    • MruManager:記錄最近編輯的文件
    • PersistWindowState:記錄窗體狀態
  • DrawTools
    • DrawArea:畫板,接受滑鼠輸入,呈現形狀
    • DrawObject:形狀的基類
    • GraphicsList:單頁形狀的呈現與管理
    • Layers:頁面管理
    • Command:全選、刪除等命令

WPF.DrawTools

基於 DrawingVisual 實現的圖形的呈現,核心元件是繼承自 CanvasDrawingCanvas 自定義控制元件,該控制元件用於承載所有的圖形以及接收使用者輸入。GraphicsBase 是所有圖形的基類,其中的 Draw(DrawingContext drawingContext) 虛方法用於決定圖形的內容。

功能方面比 WinForm 版本少一些,但是基礎功能還是齊全的,只是缺少頁面相關的功能(這部分是由 Mark Miller 擴充套件的)。程式碼方面比 WinForm 版本優化不少,架構的設計、模組的劃分、程式碼的結構更加清晰。

程式碼結構圖

  • Commands

  • Graphics

  • Tools

原始碼獲取

原始專案已經從 CodeProject 上刪除了,擴充套件後的 WinForm 專案還能搜到,但是 CodeProject 上的 WPF 專案徹底沒了。我收藏了兩個版本的原始碼,可以前往下載:

如果想了解原始專案的相關擴充套件,可訪問:

如果原始碼有疑問,可以留言交流。