不熟悉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");

 

原链接:http://www.cnblogs.com/wingofwind/articles/132602.html