不清楚下面API函数参数设置原因,请帮一帮我。具体代码如下:
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 EM_GETLINE = &HC4
Private Function GetLineText(Text1 As Textbox,Byval ntx As Long) As String
Dim str1(255) As String :请问为什么要设为字节型数组(这是第一个问题)
Dim str2 As String
dim i As Long
str1(0)=255 :请问这句代码的作用(这是第二个问题)
i=Sendmessage(Text1.hwnd,EM_GETLINE ,ntx,chr(0)) :请问参数为什么会ntx和chr(0),有什么作用(这是第三个问题)
If i=0 then
getlinetext=""
Else
str2=strconv(str1,vbunicode)
getlinetext=left(str2,instr(1,str2,chr(0))-1)
End If
End Function
以上代码百思不得其解,请教达人!
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 EM_GETLINE = &HC4
Private Function GetLineText(Text1 As Textbox,Byval ntx As Long) As String
Dim str1(255) As String :请问为什么要设为字节型数组(这是第一个问题)
Dim str2 As String
dim i As Long
str1(0)=255 :请问这句代码的作用(这是第二个问题)
i=Sendmessage(Text1.hwnd,EM_GETLINE ,ntx,chr(0)) :请问参数为什么会ntx和chr(0),有什么作用(这是第三个问题)
If i=0 then
getlinetext=""
Else
str2=strconv(str1,vbunicode)
getlinetext=left(str2,instr(1,str2,chr(0))-1)
End If
End Function
以上代码百思不得其解,请教达人!
Option ExplicitPrivate 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 EM_GETLINE = &HC4Private Function GetLineText(Text1 As TextBox, ByVal ntx As Long) As String
'str1字节数组255个字节用来存储返回文本框指定行的内容
Dim str1(255) As Byte '请问为什么要设为字节型数组 (这是第一个问题)
Dim str2 As String
Dim i As Long
'设置第一个元素的值为255,表示返回文本框指定行的最大长度,传送参数str1(0)表示接收文本首地址。你把改为10,返回应该是:第三行:12
str1(0) = 255 ' 请问这句代码的作用 (这是第二个问题)
i = SendMessage(Text1.hwnd, EM_GETLINE, ntx, str1(0)) '请问参数为什么会ntx和chr(0),有什么作用(这是第三个问题)
If i = 0 Then
GetLineText = ""
Else
str2 = StrConv(str1, vbUnicode)
GetLineText = Left(str2, InStr(1, str2, Chr(0)) - 1)
End If
End FunctionPrivate Sub Command1_Click()
Debug.Print GetLineText(Text1, 2) '返回文本框中第三行文本内容:第三行:1234567890
End SubPrivate Sub Form_Load()
Text1.Text = "第一行:1234567890" & vbCrLf & "第二行:1234567890" & vbCrLf & "第三行:1234567890" & vbCrLf & "第四行:1234567890" & vbCrLf & "第五行:1234567890"
End Sub
hwnd---接收消息的窗口句柄.对于本例就是Text1.hwnd,表示信息是发给Text1的而不是其它窗口.
wMsg---发送的信息.对于本例 EM_GETLINE = &HC4代表是要获得文本中某一行文本;
wParam--信息的附加参数,对于本例就是行的索引,0,1,2,3……,0表示第一行,1表示第二行,……以此类推;
lParam--信息的附加参数2--对于本例就是获得的某一行文本放哪里?必须放在一个Byte 数组里,放在其它地方不允许。而且Byte 数组第一个元素的值就是文本的字符数,最大不得超过255,否则溢出。
若Byte 数组第二个元素设为1(就是 str1(1)=1)表示数组容纳的最大字符数255也行。
现在来回答你的问题:
请问为什么要设为字节型数组 (这是第一个问题)-----接收文本必须用Byte 数组,所以定义了一个Byte 数组用来接收文本;
str1(0) = 255 ' 请问这句代码的作用 (这是第二个问题)----Byte 数组用来接收文本的最大字符数256个;
请问参数为什么会ntx和str1(0)) 有什么作用?(这是第二个问题)---ntx表示获得是ntx+1行的文本,str1(0) 给出了文本的最大字符数和接收文本的Byte 数组名。
---------明白了?