[API]关于代替RichTextBox控件的selStart属性的API函数不支持分析双字节的问题,静侯高手解答!

lshdic 2004-02-28 06:11:50
本人在用VB6开发文本编辑器时,为了顾全功能,使用了RichTextBox控件

但开发末期发现其selstart、sellength两个属性的使用效率“极差”!当编辑器有50000-100000字符时,如果光标靠文档末尾在使用selstart、sellength这两个属性巨慢+巨占用CPU

上次经过“rainstormmaster(暴风雨 v2.0)”的解答后,得知用以下API代码可以取代selstart属性,获得当前光标前有多少字符(光标位于第几个字符)

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_USER As Long = &H400
Private Const EM_EXGETSEL As Long = (WM_USER + 52)
Private Const EM_EXSETSEL As Long = (WM_USER + 55)
Private Const EM_GETSELTEXT As Long = (WM_USER + 62)
Private Const EM_GETSEL As Long = &HB0
Private Const EM_SETSEL As Long = &HB1
Private Type Range
cpMin As Long
cpMax As Long
End Type

Private Sub Command1_Click()
Dim cr As Range
Call SendMessage(RichTextBox1.hwnd, EM_EXGETSEL, 0, cr)
Dim start As Long, ende As Long, length As Long
start=cr.cpMin
msgbox "当前光标位于" & start
End Sub

但我发现,得到的这个数字是区分“中文或他国双字节符号、标准英文键盘符号”的,也就是说一个中文它会以为是2个字,这使我大伤脑筋,做了1个星期的测试也没能得到真实的光标位置,我想到了用strconv等转换但还是不行

只好在次请教大家了,如何用新方法或改编“rainstormmaster(暴风雨 v2.0)”的方法实现得到当前光标的真实位置?(不区分中英文)
...全文
156 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧