我的问题
我正在尝试构建一个Visual Studio扩展程序,它允许按函数而不是按文件进行编辑。我基本上想以类似于Microsoft Debugger Canvas的方式显示代码。
我想知道如何在单个窗口中托管多个Visual Studio编辑器(我认为这些窗口正在实现IVsWindowFrame)。我需要的功能如下所示:
我尝试过的事情
我花了将近两周的时间研究和尝试这些东西,但是我很难弄清楚我将要使用哪些服务、接口和类。
阅读 MSDN
首先,大部分文档讨论如何编辑单个编辑器窗口并添加装饰、标记、边距等。它没有讨论在一个窗格内生成多个编辑器的可能性。
我查看了许多我感兴趣的接口的文档,包括IVsTextBuffer
、IVsTextView
和IVsInvisibleEditor
。不幸的是,我无法让其中一些接口良好地协同工作。
许多接口引用一组Editor Samples,但是在MSDN上无法阅读或下载代码。显然,它随Visual Studio 2005一起发布,但我没有这个版本的Visual Studio,也找不到它。
与IVsUIShell交互
我可以使用
IVsUIShell.GetDocumentWindowEnum();
访问所有打开的WindowFrames。
我看到有一个IVsUiShell.CreateDocumentWindow()方法,但我完全不熟悉它接受的参数,也不知道这是否是正确的路径。
我需要做什么
- 编程创建一个可停靠的窗格
- 编程将编辑器添加到此窗格中(并确保它们在Visual Studio、运行文档表等中正确注册)
编辑:
对不起,我应该详细说明我的步骤。当我说需要在运行文档表和Visual Studio中注册时,是因为我想实际编辑自定义编辑器中的原始文档。下面是Debugger Canvas中可用功能的简短示例,我正在尝试重新创建:
http://i.imgur.com/aYm8A5E.gif(我无法嵌入.gif文件)
或者:
如果有人知道我可以在Visual Studio 2005中找到包含Basic Editor Sample之类的编辑器示例,我肯定可以弄清楚这些东西。MSDN文档没有关于这些接口的代码示例,这使我的工作非常困难。