2009-10-24 57 views
3

我正在使用Visual Studio Extensibilty API將插件寫入Sql Server Management Studio。我已經成功地在文本表面上疊加了一個控件(我試圖模仿CodeRush/Refactor動作列表,類似於intellisense組合),但是我只能根據以下屬性找到它的座標空間:如何將控件覆蓋到Visual Studio代碼表面

get 
{ 
    var point = TextDocument.Selection.TopPoint; 
    return new Cursor(point.DisplayColumn, point.Line); 
} 

此代碼的確允許我將cols/rows轉換爲像素,但是我無法找到一種方式來在文本編輯器垂直或水平滾動時抵消cols/rows。這會導致列表框在可見屏幕空間下消失。

我在尋找的是從當前列/行對獲取屏幕座標的方法,這樣我就可以將列表框放在光標旁邊,而不管滾動的位置。

+0

我不知道哪些API可用,但你確定這是不可能實現'IVsTextMarker'和'IVsTextMarkerClient'來創建與一段代碼相關的菜單(這是重構幫助器的工作方式)? – 2009-10-24 22:09:32

+0

@ 280Z28 - 這些界面看起來很有希望。我想完全跳過DTE,這看起來好像可能有效。可能是因爲我正在爲SSMS做這件事。謝謝 – 2009-10-24 22:11:41

+0

您是否想過使用DXCore(coderush背後的庫)。它免費從Dev Express – 2009-10-24 22:28:00

回答

1

TextSelection類型的TextDocument.Selection屬性具有TextPane屬性 - 有關更多信息,請參閱here。它沒有明確地這樣說,但TextPane是可見屏幕的一部分。此外,TextPane的StartPoint屬性提供滾動文本的「偏移量」。

因此,我能夠從選擇的StartPoint可以減去TextPane.StartPoint確定偏移光標位置:

get 
{ 
    var start = TextDocument.Selection.TextPane.StartPoint; 
    var top = TextDocument.Selection.TopPoint; 
    return new Cursor( 
     top.DisplayColumn - start.DisplayColumn + 1 , 
     top.Line - start.Line + 1 
    ); 
} 
相關問題