2016-01-14 71 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

相關問題