2011-04-02 38 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