Domanda

Sto scrivendo un componente aggiuntivo in SQL Server Management Studio, utilizzando le API Extensibilty di Visual Studio. Ho avuto successo sovrapponendo un controllo sulla superficie del testo (sto tentando di emulare l'elenco di azioni CodeRush / Refactor, simile alla combinazione intellisense), tuttavia riesco solo a individuare lo spazio delle coordinate in base alla seguente proprietà:

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

Questo codice mi permette di convertire i col / righe in pixel, tuttavia non riesco a trovare un modo per compensare i col / righe quando l'editor di testo è stato fatto scorrere in verticale o in orizzontale. In questo modo la casella di riepilogo scompare sotto lo spazio dello schermo visibile.

Quello che sto cercando è un metodo per ottenere le coordinate dello schermo dall'attuale coppia col / row, in modo da poter posizionare la casella di riepilogo accanto al cursore, indipendentemente dalla posizione di scorrimento.

È stato utile?

Soluzione

La proprietà TextDocument.Selection, di tipo TextSelection, ha una proprietà TextPane - vedi qui per maggiori informazioni. Non lo dice esplicitamente, ma TextPane è la parte dello schermo che è visibile. Inoltre, la proprietà StartPoint per un TextPane fornisce l'offset del testo scorrevole.

Sono stato quindi in grado di determinare la posizione del cursore di offset sottraendo TextPane.StartPoint dallo StartPoint della selezione:

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 
    );
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top