2011-04-02 39 views
1

非常自我解釋,但我試圖找出離開插入點多遠。 目前,我有以下行Visual Studio 2010 SDK,Get Caret Column

var caret = m_doc.Caret.Position.BufferPosition; 
return doc.GetTextViewLineContainingBufferPosition(caret).Start.Difference(caret); 

其中DOC是IWpfTextView。

問題是,如果您有一個標籤,它會將標籤統計爲一個標籤,而不是多少個空間組成該標籤。

示例 - |代表光標所在,\ t大小爲4片,charNo是我目前的代碼返回,山坳就是我想:

|var a //col:0 charNo:0 
\t|var //col:4 charNo:1 
\t|var //col:4 charNo:2 
\tv|ar //col:5 charNo:3 

感謝。

回答

0

爲什麼不使用.Left而不是.Start?無論選項卡如何,它都會從座標平面的左側返回當前位置。

+0

Left返回一個double,我認爲它是左邊的像素數。準確地說是 – 2011-04-03 23:37:22

+0

。 msdn說:文本渲染座標系中的距離對應於邏輯像素。如果在沒有任何縮放變換的情況下顯示文本渲染表面,則文本渲染座標系中的1個單位對應於顯示器上的一個像素。 http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.text.formatting.iwpftextviewline.aspx – phillip 2011-04-04 03:28:43

+0

但我沒有在像素位置之後,我在列之後,正如我的示例所示,我是在你之後有多少個字符,但將一個製表符視爲它所代表的空格的數量。 – 2011-04-04 04:42:38