| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 535 人关注过本帖
标题:调用 sendmessage 函数后的小问题
只看楼主 加入收藏
茅十八
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:35
专家分:123
注 册:2014-3-11
结帖率:66.67%
收藏
 问题点数:0 回复次数:3 
调用 sendmessage 函数后的小问题
[attach]75836[/attach]
程序代码:
Option Explicit
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Const EM_GETLINE As Long = &HC4
Private Const EM_GETLINECOUNT As Long = &HBA

Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal length As Long)


Private Sub Form_Load()
Dim n As Integer
Text1.Text = vbNullString
For n = 0 To 19
Text1.Text = Text1.Text & "这是第" & Str(n + 1) & "行,I like vb6 very much." & vbCrLf
Next
End Sub

Private Sub GetLine_Click()
Dim S As String
Dim length As Integer
length = 40
S = Space(length)
CopyMemory ByVal S, length, 2 '传递前,S的前2个字节保存需获取字符串的长度
SendMessage Text1.hwnd, EM_GETLINE, 5, ByVal S '读取第六行的内容
Print S
Print "chr(0)的位置是 ", InStr(S, Chr(0))
End Sub

Private Sub LineCount_Click()
Dim count As Long
count = SendMessage(Text1.hwnd, EM_GETLINECOUNT, 0, ByVal 0&)
Print "一共", count - 1, ""
End Sub


像其他API函数GetcomputerName等,返回的字符串都是以chr(0)结尾的,是我弄错了吗?

[ 本帖最后由 茅十八 于 2014-5-7 15:35 编辑 ]
2014-05-07 00:46
茅十八
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:35
专家分:123
注 册:2014-3-11
收藏
得分:0 
原因自己找到了   

vbCrLf 之前的字符串的结尾 ,就已经没有 chr(0)。

优化返回的字符串 S ,不能S=Left(S,InStr(S,chr(0))-1) , 还得使用RTrim(S).

个人QQ:1789851851,有学习问题,欢迎找我讨论,另外Win32 SDK开发群:179492890
2014-05-07 02:41
zhengang1026
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:136
专家分:409
注 册:2013-2-6
收藏
得分:0 
呵呵
2014-05-07 09:22
茅十八
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:35
专家分:123
注 册:2014-3-11
收藏
得分:0 
还有个一个改法,S = Space(length),这句改成S=String(length,chr(0))

另外,Text1.Text = Text1.Text & "这是第" & Str(n + 1) & "行,I like vb6 very much." & vbCrLf

如果在vbCrLf前 加   Chr(0) 就不行,因为后面涉及到字符串的 &或+ 操作运算后, chr(0)所在字节会被后面的字符串的第一个字母的字节内容替代。

个人QQ:1789851851,有学习问题,欢迎找我讨论,另外Win32 SDK开发群:179492890
2014-05-07 11:32
快速回复:调用 sendmessage 函数后的小问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017443 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved