2012-04-11 10 views
7

IWpfTextView에서 보이는 선을 표시선을 기준으로 ViewPort 및/또는 Text Adornment에 배치하는 방법을 알아 내려고합니다.ITrackingPoint, ITrackingSpan, SnapshotPoint, SnapshotSpan, ITextViewLine의 차이점은 무엇입니까?

이 4 가지가 어떤 방식 으로든 포함되어있는 것으로 보입니다. 그리고 내가 이해하고 있는지 확인하기 위해, Span은 TextView의 일련의 문자 일뿐입니다.

+0

좋아, 내 자신의 업데이트. – Chris

+1

실제로 업데이트하는 것을 잊었습니다. 1. TextViews는 줄을 생각하지 않습니다. TextBuffer와 시각적 인 버퍼가 다른 아웃 라인 (outlining), 줄 바꿈 (word wrap) 등 때문입니다. 2. SnapshotSpan vs SnapshotPoint - 스팬은 일련의 문자를 나타냅니다. 포인트, 한 문자. 3. TrackingPoint와 TrackingSpan. 다른 Point 및 Span과 비슷하지만 ViewPort의 위치를 ​​결정하는 데 사용됩니다. 나는 이것들이 정확하다고 생각합니다. 적어도 그런 식으로 움직이는 것 같습니다. – Chris

답변

6

IWpfTextView.TextViewLines은 보이는 선의 집합입니다. 경우에 따라 첫 번째 줄과 마지막 줄이 숨겨져 있거나 부분적으로 표시 될 수 있습니다 (그러나 두 번째 줄부터 두 번째 줄까지 항상 완전히 볼 수 있어야 함). 완전히 보이는 선의 컬렉션을 얻으려면 IWpfTextView.TextViewLines.FirstVisibleLineIWpfTextView.TextViewLines.LastVisibleLine을 사용하거나 ITextViewLine.VisibilityState == VisibilityState.FullyVisible으로 컬렉션을 필터링하면됩니다.

Span은 시작 위치와 길이를 감싸는 구조체이지만 실제 텍스트는 보유하지 않습니다. VS Editor에는 여러 가지 종류의 범위가 있습니다. 예를 들어 SnapshotSpan은 시작 위치, 길이 및 해당 스냅 샷이 속한 스냅 샷을 저장하는 ITextSnapshot의 범위입니다.

편집 : 제목에 질문을 놓친

죄송합니다.

Point은 위치를 나타내고, Span은 범위를 나타냅니다. 매개 변수로 하나를 사용하는 대부분의 VS 편집기 API는 다른 API에 과부하가 걸립니다.

ITrackingPointITrackingSpanITextBuffer입니다. "추적"은 ​​텍스트 버퍼가 변경 될 때 오프셋/증가/축소를 의미합니다. 그들은 스냅에 불가 지론입니다.

SnapshotPointSnapshotSpanITextSnapshot입니다. 그들은 ITextSnapshot에 묶여 있으며 변경할 수 없습니다.

ITextViewLine은 표시하기 위해 형식이 지정된 줄입니다. 일반적으로 변경하지 않고도 Height 또는 VisibilityState과 같은 시각적 정보 만 가져올 수 있습니다.