2016-01-14 30 views
1

我正在开发一个Visual Studio扩展中,我需要得到的,他们都在屏幕上显示的确切顺序当前打开的文档(标签)列表的顺序。确定在Visual Studio(使用EnvDTE扩展名)打开的标签

例如,this应该返回:Program.cs中,将Class1.cs,Class2.cs,Class3.cs

EnvDTE.Documents属性确实为我提供了一个列表,而不是在为了我需要:

public List<Window> GetOpenTabsOrdered(DTE2 vsInstance) 
{ 
    var openDocuments = vsInstance.Documents.Cast<Document>(); 
    return openDocuments.Select(x => x.ActiveWindow).ToList(); //wrong order 
} 

的Window.Left属性(MSDN:获取或设置对象的内部左边缘与其容器的左边缘之间的距离)也不是在确定正确的顺序特别有帮助。

我想订阅不同的事件(例如DTE2.Events.WindowEvents.WindowMoved),但并没有给我带来任何地方无论是。

回答

0

自动化模型(EnvDTE)不会给你的信息,你需要使用一些Visual Studio的SDK服务,例如IEnumWindowFrames Interface。对于每个IVsWindowFrame,则可以使用GetFramePos方法或方法的getProperty。例如,您有VSFPROPID_MDIContainerID属性可以获取组Id,VSFPROPID_IsPinned和VSFPROPID_IsProvisional以获取它是否为固定,临时等。

+0

感谢您的意见,但我仍在为此付出努力。我试着玩GetDocumentWindowEnum和GetFramePos。实际上,GetFramePos返回的坐标与EnvDTE中的Window.Left和Window.Top属性完全相同。与左侧与顶端的问题是,他们是除了活动一个所有标签始终为零(假设他们都停靠在同一窗口,看到我的第一帖子截图)。如果你能看看我的代码,并指出任何问题,我将非常感激:http://pastebin.com/uUKv6BeV – Fire095

相关问题