我正在使用Visual Studio Extensibilty API在Sql Server Management Studio中编写插件。我已经成功地将控件覆盖到文本表面上(我试图模拟CodeRush / Refactor动作列表,类似于intellisense组合),但是我只能根据以下属性找到它的坐标空间:
get
{
var point = TextDocument.Selection.TopPoint;
return new Cursor( point.DisplayColumn, point.Line );
}
这段代码允许我将cols / rows转换为像素,但是当文本编辑器垂直或水平滚动时,我找不到偏移cols / rows的方法。这会导致列表框消失在可见屏幕空间下方。
我正在寻找的是一种从当前col / row对获取屏幕坐标的方法,这样我就可以将列表框放在光标旁边,而不管滚动位置如何。
答案 0 :(得分:1)
TextDocument.Selection属性,类型为TextSelection,具有TextPane属性 - 有关详细信息,请参阅here。它没有明确说明,但TextPane是可见的屏幕部分。此外,TextPane的StartPoint属性提供滚动文本的“偏移量”。
因此,我可以通过从Selection的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
);
}