Pregunta

Estoy escribiendo un complemento en Sql Server Management Studio, usando las API de Visual Studio Extensibilty. He tenido cierto éxito al superponer un control sobre la superficie del texto (estoy intentando emular la lista de acciones CodeRush / Refactor, similar al combo intellisense), sin embargo, solo puedo ubicar el espacio de coordenadas según la siguiente propiedad:

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

Este código me permite luego convertir columnas / filas en píxeles, sin embargo, no puedo encontrar una manera de compensar las columnas / filas cuando el editor de texto se ha desplazado vertical u horizontalmente. Esto hace que el cuadro de lista desaparezca debajo del espacio visible de la pantalla.

Lo que estoy buscando es un método para obtener las coordenadas de la pantalla del par de col / fila actual, de modo que pueda colocar el cuadro de lista junto al cursor, independientemente de la posición desplazada.

¿Fue útil?

Solución

La propiedad TextDocument.Selection, de tipo TextSelection, tiene una propiedad TextPane. Consulte aquí para más información. No lo dice explícitamente, pero TextPane es la parte de la pantalla que está visible. Además, la propiedad StartPoint para un TextPane proporciona el 'desplazamiento' del texto desplazado.

Por lo tanto, pude determinar la posición del cursor de desplazamiento restando el TextPane.StartPoint del StartPoint de la selección:

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 
    );
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top