wuhuacong(伍华聪)的专栏
随笔 - 199, 文章 - 15, 评论 - 2842, 引用 - 20
C#进行Visio二次开发之界面设计及架构设计
写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层只需要做较少的工作即可完成对数据库的访问了。
主要研究技术:代码生成工具、Visio二次开发、送水管理软件等共享软件开发
专注于
Winform开发框架
、WCF开发框架的研究及应用。
转载请注明出处:
撰写人:伍华聪
http:
//
www.iqidi.com
标签:
Visio二次开发
绿色通道:
好文要顶
关注我
收藏该文
与我联系
posted on 2008-06-27 20:54
伍华聪
阅读(6665)
评论(10)
编辑
收藏
评论
1648800
#1楼
回复
引用
查看
@伍华聪
对你的Visio的二次开发系列比较有兴趣,Visio 功能强大接口丰富,不知道是否可以很方便的控制图的元素对象,进行动态展示?我原来开发了一个矢量图绘图组件,目的是为了做类似一些监控画面,因为图需要实时的展示某种状态;
2008-06-27 22:38
|
萧寒
#2楼
[
楼主
]
回复
引用
查看
可以动态展示,通过Shape对象的PinX,PinY即可定位具体的位置
2008-06-28 13:13
|
伍华聪
#3楼
回复
引用
呵呵,很强大呀,学习了
2009-04-29 09:52
|
miracle_wh[未注册用户]
#4楼
回复
引用
fgg
2009-07-08 10:40
|
dssssssssssssssssss[未注册用户]
#5楼
回复
引用
能否提供部分源代码供学习
2009-07-08 10:41
|
dssssssssssssssssss[未注册用户]
#6楼
回复
引用
请问一下,类似于你这样的程序,是否需要客户机上一定要安装Viso2003或者更高版本
2009-09-01 15:16
|
fogluo[未注册用户]
#7楼
[
楼主
]
回复
引用
查看
是的,一定要安装Visio才可以用。
2009-09-01 15:42
|
伍华聪
#8楼
回复
引用
查看
我是刚开始visio开发的,我想问问那个界面中左边那栏的形状是自己做出来的,还是用控件直接调出来的?谢谢!
2009-09-15 01:34
|
y0603
#9楼
[
楼主
]
回复
引用
查看
直接调出来的啊
2009-09-15 22:06
|
伍华聪
#10楼
回复
引用
查看
我想问问是怎样把那个形状的窗口调用出来的?
2009-09-16 16:33
|
y0603
注册用户登录后才能发表评论,请
登录
或
注册
,
返回博客园首页
。
首页
博问
闪存
新闻
园子
招聘
知识库
最新IT新闻
:
·
美国空军拟最多购买1.8万台iPad 2
·
伊朗封杀Gmail和Facebook等互联网服务
·
分析称专利之争让谷歌苹果两败俱伤
·
Android平台发现新型手机病毒Rootsmart
·
HTC首款Android4.0手机大曝光
»
更多新闻...
最新知识库文章
:
·
高级编程语言的发展历程
·
如何学习一门新的编程语言?
·
学习不同编程语言的重要性
·
为什么我喜欢富于表达性的编程语言
·
计算机专业的女生为什么要学编程
»
更多知识库文章...
China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务
导航
博客园
首页
新随笔
联系
订阅
管理
<
2008年6月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
公告
昵称:
伍华聪
园龄:
6年7个月
荣誉:
推荐博客
粉丝:
656
关注:
22
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
最新随笔
1. 淘宝API开发系列---淘宝API的测试及使用2
2. 淘宝API开发系列---淘宝API的测试及使用
3. Database2Sharp版本更新之自定义模板生成
4. 数据库访问之Sqlite的不同之处
5. Winform开发框架之数据访问层的设计
6. 使用微软企业库EnterpriseLibary访问SQLite数据库
7. Winform分页控件支持表头全选操作实现
8. Winform传统DataGridView和DevExpress控件的GridControl两者表头全选功能的实现(源码提供)
9. WCF开发框架形成之旅--个人图片信息的上传保存
10. WCF开发框架形成之旅---终极WCF框架是什么样子的
我的标签
开发辅助
(52)
共享软件开发交流
(32)
WinForm界面开发
(28)
代码生成工具
(27)
Visio二次开发
(22)
Winform开发框架
(14)
公用类库使用帮助
(9)
QQ接口编程
(8)
C#进行MapX二次开发
(6)
淘宝API
(5)
更多
随笔档案
(199)
2012年2月 (3)
2012年1月 (3)
2011年12月 (5)
2011年11月 (6)
2011年10月 (3)
2011年9月 (4)
2011年8月 (5)
2011年7月 (5)
2011年6月 (4)
2011年5月 (3)
2011年4月 (3)
2011年3月 (3)
2011年2月 (3)
2011年1月 (3)
2010年12月 (5)
2010年11月 (4)
2010年9月 (5)
2010年8月 (3)
2010年7月 (2)
2010年6月 (3)
2010年5月 (4)
2010年4月 (4)
2010年3月 (5)
2010年2月 (4)
2010年1月 (6)
2009年12月 (5)
2009年11月 (6)
2009年10月 (7)
2009年9月 (11)
2009年8月 (3)
2009年7月 (5)
2009年6月 (13)
2009年5月 (1)
2009年2月 (1)
2009年1月 (1)
2008年8月 (2)
2008年7月 (6)
2008年6月 (12)
2008年5月 (5)
2008年2月 (3)
2008年1月 (2)
2007年12月 (4)
2007年11月 (7)
2007年1月 (1)
2006年9月 (3)
2006年8月 (1)
2006年5月 (1)
2005年7月 (1)
文章分类
(14)
开发的共享软件(14)
(rss)
文章档案
(15)
2011年4月 (1)
2010年12月 (1)
2010年8月 (2)
2010年3月 (1)
2009年11月 (1)
2009年6月 (5)
2006年8月 (2)
2005年6月 (2)
相册
MyAlbum
我的好友
Alex’Sky(Blogs)
(rss)
吉日嘎拉
(rss)
黎波(Blogs)
(rss)
彭斌(Blogs)
(rss)
田政(Blogs)
(rss)
我的技术支持站点(http://www.iqidi.com)
Database2Sharp下载
代码自动生成和数据库文档的利器
爱启迪技术
提供个人共享软件、技术文章、技术支持等信息
积分与排名
积分 - 624413
排名 - 79
最新评论
阅读排行榜
评论排行榜
推荐排行榜