richtextbox中如何获取鼠标所在的行号

framset 2002-03-05 11:05:53
最好能给出代码,20分奉上
...全文
132 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
framset 2002-03-07
  • 打赏
  • 举报
回复
sbnth(晓风残夜思春水) 分已经给了,但我想问一下:

Public Const EM_GETSEL = &HB0
Public Const EM_LINEFROMCHAR = &HC9
Public Const EM_LINEINDEX = &HBB

这是什么意思,为何要这样赋值,还有那个值是怎么计算出来的?谢谢
TechnoFantasy 2002-03-07
  • 打赏
  • 举报
回复
API Viewer中都有定义
sbnth 2002-03-06
  • 打赏
  • 举报
回复
Public Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Public Const EM_GETSEL = &HB0
Public Const EM_LINEFROMCHAR = &HC9
Public Const EM_LINEINDEX = &HBB

Private Sub GetCaretPos(ByVal TextHwnd As Long)

Dim i As Long
Dim j As Long
Dim k As Long
Dim lParam As Long
Dim wParam As Long
Dim lngRow As Long '当前行
Dim lngCol As Long '当前列

'首先向文本框传递EM_GETSEL消息以获取从起始位置到
'光标所在位置的字符数

i = SendMessage(TextHwnd, EM_GETSEL, wParam, lParam)
j = i / 2 ^ 16

'再向文本框传递EM_LINEFROMCHAR消息根据获得的字符
'数确定光标以获取所在行数

lngRow = SendMessage(TextHwnd, EM_LINEFROMCHAR, j, 0)
lngRow = lngRow + 1

'向文本框传递EM_LINEINDEX消息以获取所在列数

k = SendMessage(TextHwnd, EM_LINEINDEX, -1, 0)
lngCol = j - k + 1

End Sub

在keyup和mousedown中调用该过程就可以了。
TechnoFantasy 2002-03-06
  • 打赏
  • 举报
回复
获得光标所在的行和列:
http://www.applevb.com/art/tg2.txt
dbcontrols 2002-03-06
  • 打赏
  • 举报
回复
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
Const EM_LINEFROMCHAR = &HC9

Private Sub Command1_Click()
rc = SendMessage(RichTextBox1.hwnd, EM_LINEFROMCHAR, -1, 0)
MsgBox Str(rc + 1)
End Sub

7,763

社区成员

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

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