我的问题
我正在尝试构建 Visual Studio 的扩展,允许基于每个函数而不是每个文件编辑代码。我基本上是在尝试以与Microsoft Debugger Canvas类似的方式显示代码。
我想知道如何在一个窗口中托管多个 Visual Studio 编辑器(我相信这些窗口正在实现 IVsWindowFrame)。我追求的功能如下所示:
每个编辑器窗口都保留了典型的功能并按预期与第三方扩展进行交互。(例如,VsVim 在这些窗口中正常运行)。
我试过的
我花了将近两个星期的时间研究和尝试这些东西,但在弄清楚我将要使用哪些服务、接口和类时遇到了很多麻烦。
通过 MSDN 阅读
首先,大部分文档都讨论了如何编辑单个编辑器窗口并添加装饰、标签、边距等。它没有讨论在窗口窗格中生成多个编辑器的可能性。
我浏览了有关我感兴趣的大量接口的文档,包括IVsTextBuffer
,IVsTextView
和IVsInvisibleEditor
. 不幸的是,我无法让其中一些界面很好地配合使用。
最重要的是,通常优秀的MSDN在这方面非常缺乏。许多接口只包含一个成员列表,甚至没有关于预期用途和功能的基本说明。(例如IComponentModel)。
许多接口都引用了一组编辑器示例,但无法在 MSDN 上阅读或下载代码。显然它是随 Visual Studio 2005 一起提供的,但我没有这个版本的 Visual Studio,也找不到它。
与 IVsUIShell 交互
我可以访问所有打开的 WindowFramesIVsUIShell.GetDocumentWindowEnum();
我看到有一个IVsUiShell.CreateDocumentWindow()方法,但我完全不熟悉它接受的参数,或者这是否是正确的路径。
我需要做什么
- 以编程方式创建可停靠窗口窗格
- 以编程方式将编辑器添加到此窗口窗格。(并确保它们在 Visual Studio、正在运行的文档表等中正确注册)
编辑:
对不起,我应该扩大我的步骤。当我说我需要注册正在运行的文档表和 Visual Studio 时,这是因为我想在我的自定义编辑器中实际编辑原始文档。下面是我尝试重新创建的 Debugger Canvas 中可用功能的简短示例:
http://i.imgur.com/aYm8A5E.gif(我无法嵌入 .gif)
或者:
如果有人知道我在哪里可以找到包含在 Visual Studio 2005 中的编辑器示例,例如基本编辑器示例,我相信我可以弄清楚这些东西。MSDN 文档中没有关于这些接口的代码示例,这让我的工作变得异常困难。