不清楚下面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   
   以上代码百思不得其解,请教达人!   
    

解决方案 »

  1.   

    '设置Text1.MultiLine=True
    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
      

  2.   

    首先要弄清SendMessage的四个参数:
    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 数组名。
    ---------明白了?