程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#進行Visio二次開發之界面設計及架構設計

C#進行Visio二次開發之界面設計及架構設計

編輯:關於C#

寫C#進行Visio二次開發的系列文章有很多篇了,都是寫一些經驗總結和技術知識的分享,本文繼續來探討這方面開發的一些心得,主要介紹下WinForm界面的設計和Visio軟件的架構設計。先看看我花了N個月的業余時間完成的軟件概貌,然後大家一起討論下相關的技術知識。

軟件界面主要有菜單區、工具條區、圖紙內容區、右邊的管理區、狀態條區等等,主要注意的是采用了ToolStripPanel來進行布局,然後並使用了有名的WeifenLuo.WinFormsUI.Docking.dll控件對圖紙內容區、右邊的管理區進行控制。其他就是細致的修改了:如為按鈕、菜單添加圖片,調整樣式等。 Visio的SDK提供了很多基本的操作功能,如下面所示的這些功能,主要都是通過調用其內部函數實現的。

 

其中文件中的另存為和導出AutoCad的操作是通過下面代碼完成的。

SaveFileDialog dlg = new SaveFileDialog();

dlg.FileName = Portal.gc.gVisioImage.VisioName;

dlg.Filter = "Visio文件(*.vsd)|*.vsd|所有文件(*.*)|*.*";
  dlg.FilterIndex = 1;
  if (dlg.ShowDialog() == DialogResult.OK)
       {         if (dlg.FileName.Trim() != string.Empty)
        {           if (File.Exists(dlg.FileName))
           {             File.Copy(Portal.gc.gVisioTemplateFilePath, dlg.FileName, true);
}           else
           {             File.Copy(Portal.gc.gVisioTemplateFilePath, dlg.FileName);
}
}
}
SaveFileDialog dlg = new SaveFileDialog();
dlg.FileName = "";
dlg.Filter = "AutoCAD 繪圖 (*.dwg)|*.dwg|所有文件(*.*)|*.*";
dlg.FilterIndex = 1;
 if (dlg.ShowDialog() == DialogResult.OK)
      {         if (dlg.FileName.Trim() != string.Empty)
         {           VisApplication.ActivePage.Export(dlg.FileName);
       }
}

其中的視圖中有很多Visio的視圖窗口需要控制,如形狀窗口、自定義屬性窗口、掃視縮放窗口、大小位置窗口、其他還有如標尺、網格等顯示設置需要控制。這些都是通過調用Application.DoCmd((short)commandID);函數實現的,只要傳入了相應的命令ID,那麼就達到了控制顯示的功能。如自定義屬性窗口為VisUICmds.visCmdCustProp,形狀窗口為VisUICmds.visCmdShapesWindow,標尺為VisUICmds.visCmdViewRulers,網格為VisUICmds.visCmdViewGrid,這些屬性都是可以在SDK中查找到的。 縮放圖紙操作,請參考我的一篇文章:C#進行Visio二次開發之圖紙縮放操作的實現裡面有具體的實現過程。

以上的格式和形狀菜單項中的操作也是通過Application.DoCmd((short)commandID);函數實現的,只要查詢到相應的命令ID即可進行調用,你花點時間看看VisUICmds枚舉下都有那些命令ID可以調用就可以了。以上圖片中關於右鍵菜單的操作,請參考我前面寫的一篇文章C#進行Visio二次開發之自定義右鍵菜單 再來說說軟件的架構設計吧。整個UI層主要應用了前面介紹過的WeifenLuo.WinFormsUI.Docking.dll的控件(即圖中的DockingControl組件),還有就是Visio Drawing Control的OCX控件了(圖中的VisioOCX組件)。兩邊是各個層中用到的通用類(Commons)和實體類(Entity)。

Visio的二次開發,除了需要操作Visio的文件(包含多個模具文件,Viso文檔)還有就是也需要和數據庫打交道(沒有數據庫的程序會遜色很多的)。為了較好區分和協調他們的訪問,我設定了一個訪問邊界:訪問數據庫的層不會訪問Visio文件對象,訪問Visio文件對象的不會去訪問數據庫,它們統一由業務層(Business)調配,各層之間分享Entity層的信息即可。數據庫的底層訪問通過利用Enterprise Library的模塊完成,因此DAL層只需要做較少的工作即可完成對數據庫的訪問了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved