你如何在Visio 2013插件中添加自定义面板?

5

最近我编写了一个Outlook插件,其中包含一个ribbon.xml文件,用于添加额外的功能区、上下文菜单等。我还添加了一个额外的面板,停靠在我的窗口右侧。

现在,我开始研究如何为Visio创建插件。ribbon.xml基本相同,所以这不是问题。然而,我似乎找不到任何方法在打开Visio文档时添加自定义面板。

到目前为止,在Visio中,我有以下内容来确定是否打开/创建/更改文档:

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    MessageBox.Show("Visio Add-In V1");
    Globals.ThisAddIn.Application.DocumentChanged += new Visio.EApplication_DocumentChangedEventHandler(docChanged);
    Globals.ThisAddIn.Application.DocumentOpened += new Visio.EApplication_DocumentOpenedEventHandler(docChanged);
    Globals.ThisAddIn.Application.DocumentCreated += new Visio.EApplication_DocumentCreatedEventHandler(docChanged);
}

private void docChanged(Visio.Document doc)
{
    MessageBox.Show("Document loaded");
}

在Outlook中,我会按照以下方式添加一个自定义面板(简化版):
MyPanel ctrl = new MyPanel();
Microsoft.Office.Tools.CustomTaskPane ctp = Globals.ThisAddIn.CustomTaskPanes.Add(ctrl, title);
ctp.Visible = true;
ctp.Width = 300;
ctp.DockPosition = Microsoft.Office.Core.MsoCTPDockPosition.msoCTPDockPositionRight;

如何在Visio 2013 Add-In中实现此功能?

编辑:

不幸的是,这让我想到这是不可能的:http://msdn.microsoft.com/en-us/library/vstudio/bf08984t.aspx

编辑2:

以下答案应该有效:Are Task Panes Available in Visio VSTO?

但是我似乎找不到在我的主窗口上获取停靠面板的方法。这是我尝试过的:

Globals.ThisAddIn.Application.Windows.Add("testpanel", VisWindowStates.visWSDockedLeft, VisWinTypes.visStencilAddon, null, null, null, 300);

这将添加窗口,就像它是一个新的绘图一样...

编辑3:

Visio会抛出COM异常,表示我有一个无效的窗口类型。

Application.Windows.Add("testpanel", VisWindowStates.visWSDockedRight, VisWinTypes.visAnchorBarAddon, null, null, 300);
1个回答

2
您可以在Visio中使用 Anchor Bars,而不是任务窗格。 如果您下载Visio SDK并查看代码示例库,则会在用户界面下找到 Anchor Bar Usage。
为了完整起见,您可能希望查看此 MSDN 文章《Windows.Add Method (Visio) - http://msdn.microsoft.com/en-us/library/office/ff767674.aspx》。

如果我尝试使用visAnchorBarAddon的代码示例,Visio会抛出一个COM异常,说窗口类型无效。除了visStencilAddon之外,任何东西都会这样做。我将编辑我的帖子以展示我尝试过什么。 - Toon Casteele
我已经有了Visio SDK,但显然忽略了那个代码示例,谢谢你的帮助。 - Toon Casteele

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接