使用Visio 2003 Drawing Control开发应用(1)
不熟悉Visio的人应该先看看visio究竟是个什么东西,visio这个东西还是很不错的软件。
在安装完Visio之后,就可以使用这个control了,在vs.net环境中,在工具箱上添加Microsoft Visio 11.0 Drawing Control的COM 组件,然后就可以往Form中拖了。(这个时候引用中会自动多了AxVisOcx, VisOcx 和Visio的引用)
这里要使用到两个namespace
using Visio=Microsoft.Office.Interop.Visio; // 这个namespace中是所有Visio对象模型的对象
using AxVisOcx = AxMicrosoft.Office.Interop.VisOcx; // 这个namespace中有该控件的对象
对于这个control,有几个很重要的属性需要知道
Src: 这个属性用来打开或者关闭当前文档,关闭当前文档直接设置Src=""就可以了,打开时,设置Src等于打开文件的路径(绝对路径)。
NegotiateMenus和NegotiateToolbars是用来显示visio自己的菜单和工具栏的,对于WinForm程序来说是无法显示的,原因是因为Window Form程序不支持OLE菜单合并的功能。而且,这个两个属性必须设置成一致的。
HostID:是为了分辨不同visio host的一个属性,一般来说,在这里放置一个GUID,这样,你的应用对Visio一些配置就不会影响到Visio本身或者其他Visio的应用了。要做这样的配置,需要在注册表项HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\VisioHosts加上这个GUID
接着,要了解Visio的对象模型,这个看msdn中就有这个object model,还有详细的说明。这里需要至少用到的一些对象包括
private Visio.Application visApplication = null; // 当前Visio Control的Application对象
private Visio.Page visPage = null; // 当前Visio Control的Page对象
private Visio.Document visDocument = null; // 当前 Visio Control的Document对象
private Visio.Documents visDocuments = null; // 当前Visio Control的Documents对象
private Visio.Window visWindow = null; // 当前Visio Control的Window对象
private Visio.Shape visClickedShape = null; // 当前Visio Control点击的Shape对象
这些对象需要设置,如果打开的文档发生了变化,需要更新,最好有这样的函数
private void SetVisioVariables()
{
visApplication = (Visio.Application)visDrawing.Window.Application;
visPage = (Visio.Page)visDrawing.Document.Pages[1];
visWindow = (Visio.Window)visDrawing.Window;
visDocument = (Visio.Document)visDrawing.Document;
visDocuments = (Visio.Documents)visDrawing.Window.Application.Documents;
}
这里设置visPage直接等于isDrawing.Document.Pages[1]是因为我这里使用的单页模式,所以直接设置。(注意:Visio里面的collection的内容是从1开始的,不是0)
还有一些属性可以控制,比如:
visWindow.ShowPageTabs = false; // 不让显示页的标签
visWindow.Zoom = 1.00; // 设置缩放比例为100%
visDocument.GestureFormatSheet.get_CellsSRC((short)Visio.VisSectionIndices.visSectionCharacter, 0,
(short)Visio.VisCellIndices.visCharacterSize).FormulaU = "9 pt"; // 设置字体为9号字,这个是高级用法了,我会在后面讲解
还能控制是否显示网格,标尺等等
接下来,就可以使用了
打开文件:比如visDrawing.Src = "c:\\Blank.vtx"; 这样就可以打开一个文件,这里是一个xml的模板文件。如果是模板,那么一般来说是带stencil的,stencil就是形状模具,visio 2003带有形状搜索的功能,如果你不想让搜索出现,
Visio.Windows wnds = visApplication.Windows;
for(short i = 1; i <= wnds.Count; i++)
wnds[i].Windows.get_ItemFromID((int)Visio.VisWinTypes.visWinIDShapeSearch).Visible = false;
打开后,记着设置对象: this.SetVisioVariables();
如果想更改打开的文件,可以设置Src="";然后设置Src等于要打开的文件。但是,有时你想添一个模具窗口进来,这时候可以使用Open或OpenEx方法:
this.visDocuments.OpenEx("c:\\MainStencil.vsx", (short)Visio.VisOpenSaveArgs.visOpenDocked + (short)Visio.VisOpenSaveArgs.visOpenRO);
这样就加了一个模具窗口进来,同时设置了让这个窗口dock而且是只读打开。
保存时,使用Save或SaveAs就可以(Save只能存成vsd文件,要保存其他格式需要使用SaveAs方法)
visDocument.SaveAs("e:\\temp.vdx");
下一节,介绍对于各种事件的处理。