通常我们要获得EDIT编辑框的某一行的文本,只要用sendmessage发送EM_GETLINE消息就可以了,然而当我们试图发送EM_GETLINE消息给Richtextbox控件时,却得不到正确的数据,这在Richtextbox控件同时包含中文和英文时表现的很明显,而如果Richtextbox控件的内容只有英文时,发送EM_GETLINE消息则可以得到正确的数据(写到这里,不由得开始羡慕米国人不需要同unicode打交道)。
我的做法是发送EM_GETTEXTRANGE消息给Richtextbox控件,代码如下:
Option Explicit
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 GTL_NUMBYTES = 16&
Private Const EM_LINEINDEX = &HBB
Private Const EM_GETLINECOUNT = &HBA
Private Const EM_LINELENGTH = &HC1
Const WM_USER = &H400
Const EM_GETTEXTRANGE = (WM_USER + 75)
Private Type CHARRANGE 'cr
cpMin As Long
cpMax As Long
End Type<