API参数问题

firefox135 2009-06-13 05:22:03
不清楚下面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
以上代码百思不得其解,请教达人!
...全文
67 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
firefox135 2009-06-15
  • 打赏
  • 举报
回复
二楼的哥哥,对不起,我想把分给你的,可惜弄错了,有什么办法给你重新加分呢?
simon__sun 2009-06-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 syssz 的回复:]
首先要弄清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 数组名。
---------明白了?



[/Quote]

up
SYSSZ 2009-06-13
  • 打赏
  • 举报
回复
首先要弄清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 数组名。
---------明白了?





东方之珠 2009-06-13
  • 打赏
  • 举报
回复
'设置Text1.MultiLine=True
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 EM_GETLINE = &HC4

Private 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 Function

Private Sub Command1_Click()
Debug.Print GetLineText(Text1, 2) '返回文本框中第三行文本内容:第三行:1234567890
End Sub

Private Sub Form_Load()
Text1.Text = "第一行:1234567890" & vbCrLf & "第二行:1234567890" & vbCrLf & "第三行:1234567890" & vbCrLf & "第四行:1234567890" & vbCrLf & "第五行:1234567890"
End Sub

1,488

社区成员

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

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