代码之家  ›  专栏  ›  技术社区  ›  Ben Laan

如何将控件覆盖到Visual Studio代码图面上

  •  3
  • Ben Laan  · 技术社区  · 16 年前

    我正在使用Visual Studio扩展API将外接程序写入SQL Server Management Studio。我已经成功地将控件覆盖到文本表面(我正在尝试模拟coderush/refactor操作列表,类似于intellisense组合),但是我只能基于以下属性定位它的坐标空间:

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

    这段代码允许我将列/行转换为像素,但是当文本编辑器垂直或水平滚动时,我找不到一种方法来偏移列/行。这会导致列表框消失在可见屏幕空间下方。

    我要寻找的是一种从当前的列/行对中获取屏幕坐标的方法,这样无论滚动位置如何,我都可以将列表框放在光标旁边。

    1 回复  |  直到 16 年前
        1
  •  1
  •   Ben Laan    16 年前

    textSelection类型的textDocument.Selection属性具有textPane属性-请参见 here 更多信息。它并没有明确地这么说,但文本窗格是屏幕上可见的部分。此外,文本窗格的StartPoint属性提供滚动文本的“偏移量”。

    因此,我可以通过从选择的起点减去textfane.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 
        );
    }