2012-02-22 127 views
1

我發佈了一個類似於此前的問題,但是,在考慮它並測試答案後,我相信我曲解了答案,並且答案人誤解了我。原來的問題是here。我認爲人們相信我只是想突出字符串,我沒有說明我的確切目的。所以,我現在將:自定義文本框:突出顯示和選擇

我最近一直在嘗試做的是使用GDI +在C++ CLR中創建一個100%從零開始的文本框。當用戶點擊文本框時,我已經接觸到了放入插入符的挑戰。做簡單的數學(他們點擊的地方除以線寬)我可以找出他們點擊了哪一行。但爲了獲得點擊的字符,我需要(除非有更好的方法)比較行中所有字符的邊界矩形,並將鼠標放入鼠標之前的位置。爲了做到這一點,我需要得到每個單個字符的確切範圍,而不是整個字符串。

我已經嘗試了一些東西,其中沒有一個似乎工作:

我相信我不能使用這些方法,除非有辦法解決它們的侷限性。我希望我能讓我的問題和預期的解決方案比我以前做得更清楚。

+0

我看不到Graphics :: MeasureCharacterRanges鏈接中的任何內容,表示32個字符的上限。 – 2012-02-22 19:52:10

+0

@MarkRansom我在某處讀過它,當然我得到一個OverflowException當我做32個字符 – smoth190 2012-02-23 04:33:01

回答

1

由於文本是字體和消除鋸齒的方式,字符的邊界取決於它左側的所有字符。但是,您不需要知道每個字符邊界,只需要知道點擊點兩側的邊界。你可以找到那些二進制搜索 - 分割你的字符串,測量(使用TextRenderer :: MeasureText),並確定它是否在你的點擊點的左側或右側。繼續縮小字符串的大小,直到只剩下一種可能性。

+0

好吧,那麼如果解決了點擊問題,當我遇到突出問題時會發生什麼?我上面的測量結果仍然不能解決我的問題。 – smoth190 2012-02-23 04:34:43

+0

@ smoth190,那更容易。只需在高光之前對角色進行一次測量,並在高光之前進行一次測量。 – 2012-02-23 04:42:33

+0

好吧,我想這似乎是合乎邏輯的。感謝您的幫助,我剛剛得到了這一切工作。 – smoth190 2012-02-27 20:34:50