C#进行Visio二次开发之界面设计及架构设计

简介:
写C#进行Visio二次开发的系列文章有很多篇了,都是写一些经验总结和技术知识的分享,本文继续来探讨这方面开发的一些心得,主要介绍下WinForm界面的设计和Visio软件的架构设计。
先看看我花了N个月的业余时间完成的软件概貌,然后大家一起讨论下相关的技术知识。
Visio_MainForm.jpg
软件界面主要有菜单区、工具条区、图纸内容区、右边的管理区、状态条区等等,主要注意的是采用了ToolStripPanel来进行布局,然后并使用了有名的WeifenLuo.WinFormsUI.Docking.dll控件对图纸内容区、右边的管理区进行控制。
其他就是细致的修改了:如为按钮、菜单添加图片,调整样式等。
Visio的SDK提供了很多基本的操作功能,如下面所示的这些功能,主要都是通过调用其内部函数实现的。
Visio_File.jpg   Visio_View.jpg

其中文件中的另存为和导出AutoCad的操作是通过下面代码完成的。
None.gif             SaveFileDialog dlg  =   new  SaveFileDialog();
None.gif            dlg.FileName 
=  Portal.gc.gVisioImage.VisioName;
None.gif            dlg.Filter 
=   " Visio文件(*.vsd)|*.vsd|所有文件(*.*)|*.* " ;
None.gif            dlg.FilterIndex 
=   1 ;
None.gif            
if  (dlg.ShowDialog()  ==  DialogResult.OK)
ExpandedBlockStart.gif            
{
InBlock.gif                
if (dlg.FileName.Trim() != string.Empty)
ExpandedSubBlockStart.gif                
{
InBlock.gif                    
if (File.Exists(dlg.FileName))
ExpandedSubBlockStart.gif                    
{
InBlock.gif                        File.Copy(Portal.gc.gVisioTemplateFilePath, dlg.FileName, 
true);
ExpandedSubBlockEnd.gif                    }

InBlock.gif                    
else
ExpandedSubBlockStart.gif                    
{
InBlock.gif                        File.Copy(Portal.gc.gVisioTemplateFilePath, dlg.FileName);
ExpandedSubBlockEnd.gif                    }

ExpandedSubBlockEnd.gif                }

ExpandedBlockEnd.gif            }
None.gif             SaveFileDialog dlg  =   new  SaveFileDialog();
None.gif            dlg.FileName 
=   "" ;
None.gif            dlg.Filter 
=   " AutoCAD 绘图 (*.dwg)|*.dwg|所有文件(*.*)|*.* " ;
None.gif            dlg.FilterIndex 
=   1 ;
None.gif            
if  (dlg.ShowDialog()  ==  DialogResult.OK)
ExpandedBlockStart.gif            
{
InBlock.gif                
if (dlg.FileName.Trim() != string.Empty)
ExpandedSubBlockStart.gif                
{
InBlock.gif                    VisApplication.ActivePage.Export(dlg.FileName);
ExpandedSubBlockEnd.gif                }

ExpandedBlockEnd.gif            }
其中的视图中有很多Visio的视图窗口需要控制,如形状窗口、自定义属性窗口、扫视缩放窗口、大小位置窗口、其他还有如标尺、网格等显示设置需要控制。这些都是通过调用Application.DoCmd((short)commandID);函数实现的,只要传入了相应的命令ID,那么就达到了控制显示的功能。如自定义属性窗口为VisUICmds.visCmdCustProp,形状窗口为VisUICmds.visCmdShapesWindow,标尺为VisUICmds.visCmdViewRulers,网格为VisUICmds.visCmdViewGrid,这些属性都是可以在SDK中查找到的。

缩放图纸操作,请参考我的一篇文章: C#进行Visio二次开发之图纸缩放操作的实现 里面有具体的实现过程。

Visio_Other.jpg Visio_MarkerMenu.jpg
以上的格式和形状菜单项中的操作也是通过Application.DoCmd((short)commandID);函数实现的,只要查询到相应的命令ID即可进行调用,你花点时间看看VisUICmds枚举下都有那些命令ID可以调用就可以了。
以上图片中关于右键菜单的操作,请参考我前面写的一篇文章 C#进行Visio二次开发之自定义右键菜单 

再来说说软件的架构设计吧。
整个UI层主要应用了前面介绍过的WeifenLuo.WinFormsUI.Docking.dll的控件(即图中的DockingControl组件),还有就是Visio Drawing Control的OCX控件了(图中的VisioOCX组件)。
两边是各个层中用到的通用类(Commons)和实体类(Entity)。
Visio_Architecture.jpg

Visio的二次开发,除了需要操作Visio的文件(包含多个模具文件,Viso文档)还有就是也需要和数据库打交道(没有数据库的程序会逊色很多的)。
为了较好区分和协调他们的访问,我设定了一个访问边界:访问数据库的层不会访问Visio文件对象,访问Visio文件对象的不会去访问数据库,它们统一由业务层(Business)调配,各层之间分享Entity层的信息即可。
数据库的底层访问通过利用Enterprise Library的模块完成,因此DAL层只需要做较少的工作即可完成对数据库的访问了。
本文转自博客园伍华聪的博客,原文链接: C#进行Visio二次开发之界面设计及架构设计,如需转载请自行联系原博主。


目录
相关文章
|
6月前
|
C#
CAD2015 C#二次开发 字体变形
CAD2015 C#二次开发 字体变形
|
Web App开发 JavaScript 前端开发
TE二次开发:BS和CS的架构说明
skyline二次开发,BS和CS的架构说明
113 0
基于C#的ArcEngine二次开发56:双击属性表跳转目标要素并闪烁
基于C#的ArcEngine二次开发56:双击属性表跳转目标要素并闪烁
基于C#的ArcEngine二次开发56:双击属性表跳转目标要素并闪烁
基于C#的ArcEngine二次开发54:IStatusBar状态栏接口的使用
基于C#的ArcEngine二次开发54:IStatusBar状态栏接口的使用
基于C#的ArcEngine二次开发54:IStatusBar状态栏接口的使用
|
定位技术 C# 图形学
基于C#的ArcEngine二次开发53: mxd与IPagelayout
基于C#的ArcEngine二次开发53: mxd与IPagelayout
|
NoSQL 数据处理 C#
基于C#的ArcEngine二次开发52:GDB数据处理过程中与Name相关的操作
基于C#的ArcEngine二次开发52:GDB数据处理过程中与Name相关的操作
基于C#的ArcEngine二次开发52:GDB数据处理过程中与Name相关的操作
基于C#的ArcEngine二次开发51:获取图层字段唯一值列表(Get Unique Values)
基于C#的ArcEngine二次开发51:获取图层字段唯一值列表(Get Unique Values)
基于C#的ArcEngine二次开发51:获取图层字段唯一值列表(Get Unique Values)
|
存储 NoSQL Unix
基于C#的ArcEngine二次开发50:MDB创建新要素类及“无当前记录”异常处理
基于C#的ArcEngine二次开发50:MDB创建新要素类及“无当前记录”异常处理
基于C#的ArcEngine二次开发50:MDB创建新要素类及“无当前记录”异常处理
|
NoSQL C# 数据库管理
基于C#的ArcEngine二次开发49:修改图层名称和别名、字段名称
基于C#的ArcEngine二次开发49:修改图层名称和别名、字段名称
|
C# 数据库
基于C#的ArcEngine二次开发45:属性值设置中的DBNull、null和default
基于C#的ArcEngine二次开发45:属性值设置中的DBNull、null和default
基于C#的ArcEngine二次开发45:属性值设置中的DBNull、null和default