2011-09-06 5 views
0

저는 사용자 정의 텍스트 상자입니다. 이제 사용자가 줄을 클릭하고 클릭 한 부분으로 커서를 이동할 수있는 부분을 구현하고 있습니다.픽셀 오프셋을 기반으로 문자열 인덱스 가져 오기

문자 높이가 모든 글꼴에서 일정하지만 열이 없기 때문에 클릭 한 텍스트 행을 얻는 방법을 알고 있습니다. 그 이유는 "그릴 수있는 텍스트를 모두 가져와야합니다. 너비가 고정 너비 글꼴을 사용하지 않는 한 일관성이 없기 때문에 문자 폭은 보장되지 않습니다.

그래서 나는 () 문자열을 그리는 요점을 가지고 있는데 사용자가 클릭 한 점이 있습니다. 클릭 한 캐릭터의 문자열 인덱스는 어떻게 얻습니까?

추가 정보 : 목록에 줄을 저장 한 다음 목록을 반복하고 각 줄에 Graphics.DrawString을 사용하여 텍스트를 그립니다.

답변

1

픽셀에서 문자를 찾는 간단한 방법은 없습니다.

그러나 문자열로 채울 픽셀을 찾을 수 있습니다. Graphics.MeasureCharacterRanges 방법을 사용하십시오. MeasureCharacterRanges가 커서 위치를 반환하는 문자열을 찾을 때까지 문자열에서 이진 검색을 수행 할 수 있습니다.

참고 : 당신은 Graphics.MeasureString 방법을 볼 수 있으며 그것을 사용하는 유혹. 하지 마! 이 방법은 정확한 측정 값을 반환하지 않습니다. 이유를 기억할 수 없지만 시도하면 머리를 숙일 것입니다!

+0

모든 텍스트 편집기가 이런 식으로해야합니까? 즉, RichTextBox가 이렇게합니까? 예쁜 해킹 같아. –

+0

RichTextBox에는 GetCharFromPosition 메서드가 있습니다. 이것은 네이티브 windows API 메시지를 사용하여 문자 색인을 얻습니다. –

+0

이것을 사용할 방법이 있습니까? 기본 API 메시지는 어떻게 처리합니까? –

관련 문제