level 9
用SendMessage + EM_SETSEL 在Textbox选取文本
在开发环境调试时,有中文就选不对,但是编译后选择的位置就是正确的,原因是什么?
有没有办法在调试时也能正确选择?
2023年06月16日 09点06分
1
level 12
有两个版本,SendMessageA和SendMessageW,你声明的时候用的是哪个?换一下试试
2023年06月16日 16点06分
2
我声明时用的是A版,试了一下两个版本没有区别。 文本为默认代码页(而且因为是从显示结果选择,应该无关),无论是EM_SETSEL,还是EM_GETSEL,在IDE下都把汉字当两个字符,编译后当成一个字符。
2023年06月19日 03点06分
level 9
Public Declare Function SendMessageByRefW Lib "USER32" Alias "SendMessageW" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByRef wParam As Long, ByRef lParam As Long) As Long
Private Sub TxtFile_Click()
Dim lSelStPos As Long '选择起始位置
Dim lSelEdPos As Long '选择结束位置
' DispMsg "Position at " & TxtFile.SelStart
SendMessageByRefW TxtFile.hwnd, EM_GETSEL, lSelStPos, lSelEdPos
DispMsg "Position at " & lSelEdPos & " " & lSelEdPos
End Sub
这样可以取鼠标位置,随便输入汉字文本,鼠标点击可以看到一个汉字是占了2个字符还是1个。
2023年06月21日 07点06分
4