句柄6

SendMessage发送文本技巧精解,不容错过
用发送文本控制外部控件内容,是程序员经常遇到的难题,第一个是句柄查找,具体请参考我的帖子,查找子窗口与枚举子窗口例程.
第二个难题就是如何把文本发送出去.今天就第二个问题进行讲解
第一种方法:post 该 方法没有返回值
.版本 2

.子程序 投递文本, , 公开, 向指定窗口句柄的窗口中发送文本内容(无返回值)
.参数 窗口句柄, 整数型, , 接收消息的窗口句柄
.参数 文本内容, 文本型, , 发送的文本内容
.局部变量 消息, 字节集
.局部变量 长度, 整数型
.局部变量 计次, 整数型

消息 = 到字节集 (文本内容)
长度 = 取字节集长度 (消息)
.计次循环首 (长度, 计次)
投递消息 (窗口句柄, 258, 消息 [计次], 0)
.计次循环尾 ()

.版本 2

.DLL命令 投递消息, , , "PostMessageA", 公开, 向指定窗口句柄发送消息
.参数 h, 整数型
.参数 m, 整数型
.参数 p, 整数型
.参数 p, 整数型

效果是在控件当前选择起始位置添加文本.(注意如果控件有部分文本处于被选中状态,将发生替换选中文本)

第二种方法:send

其中最为常用 的就是用#WM_SETTEXT(12)来发送文本

即 发送消息_文本 (hwnd, 12, 0, 传递的内容) '  传递文本#WM_SETTEXT12
.版本 2

.DLL命令 发送消息_文本, 整数型, "user32", "SendMessageA", , 调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则该函数不会返回。SendMessageBynum, ; SendMessageByString是该函数的“类型安全”声明形式 由具体的消息决定
.参数 窗口句柄, 整数型, , 要接收消息的那个窗口的句柄
.参数 信息值, 整数型, , 消息的标识符
.参数 参数一, 整数型, , 具体取决于消息
.参数 参数二, 文本型, , 具体取决于消息;

效果是替换原来的文本内容为传递的文本内容

如果想保留原来的部分内容怎么办?用以下 的api

.版本 2

.DLL命令 发送消息_整数, 整数型, "user32", "SendMessageA", , 调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则该函数不会返回。SendMessageBynum, ; SendMessageByString是该函数的“类型安全”声明形式 由具体的消息决定
.参数 窗口句柄, 整数型, , 要接收消息的那个窗口的句柄
.参数 信息值, 整数型, , 消息的标识符
.参数 参数一, 整数型, , 具体取决于消息
.参数 参数二, 整数型, , 具体取决于消息; 注意 最后 参为整数型

用到的命令用下:
.版本 2

发送消息_整数 (hwnd, 177, 整数, 整数)
发送消息_ (hwnd, 194, 1, 传递的内容)
这里的第3参和第4参都是整数,是什么整数呢?这个有讲究
你可以先放几个数试验下:
如:发送消息_整数 (hwnd, 177, -1, 0)
发送消息_整数 (hwnd, 177, 5, 3)
发送信息_整数 (hwnd, 177,4 8)
发送信息_整数 (hwnd, 177,4 -1)
多试几次,就会发现,原来传递的文本与原文本间发生了有趣的组合
现总结如下:
i)如果第三参为-1,不管第四参为何数,都是在原文本的焦点位置添加文本(如原文本部分内容处于被选择状态,则发生替换该 选择内容...
ii)如果第四参为-1,且 第三参不为-1(第三参为-1时参数i)设为 x,效果是从原文本的第x的位置开始全部替换,如x=0,则从文本起始处替换...
iii)在第三参与第四参都不为-1时,第三参设为x,第四参设为 y,不管x,y哪个 大.永远是从两者最小的那个 数作为开始位置,替换的数量为两者之差
如x=3,y=7,则从第3个位置替换7-3=4个字符.又如x=8,y=5,则从第5个位置替换8-5=3个字符...
iiii)对于汉字而言,一个汉字相当于两个字符...
例程未写,仅发出来让大家参考下.发送文本的若干方式.和发送后的效果...
有兴趣,可跟帖讨论...

 

posted on 2011-02-24 16:43  为人民服务  阅读(185)  评论(0编辑  收藏  举报