首页 > 开发 > 综合 > 正文

SendMessage API函数在PowerBuilder中应用

2024-07-21 02:10:15
字体:
来源:转载
供稿:网友
sendmessage api函数在powerbuilder中应用
sendmessage api函数在powerbuilder中应用
一、引言
在powerbulider巧妙地调用api函数sendmessage,可以完成pb中的一些用常规的方法而很难实
现的功能,特将对该api函数在powerbuilder中的使用,例举几个方面的运用,以期起到抛砖引玉的效果(以下代码完全可以使用powerbuilder中的send函数替代sendmessage 这个api函数,因起稿比较匆忙,代码未经测试)
二、函数说明
sendmessage函数说明:
说明 
调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则该函数不会返回。sendmessagebynum, sendmessagebystring是该函数的“类型安全”声明形式 
返回值 
long,由具体的消息决定 
参数表 
参数 类型及说明 
hwnd long,要接收消息的那个窗口的句柄 
wmsg long,消息的标识符 
wparam long,具体取决于消息 
lparam any,具体取决于消息 
powerbuilder中已使用函数send函数对其进行了封装
函数原形:send ( handle, message#, lowword, long )
send函数说明:
说明 
调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则该函数不会返回。 
返回值 
long,由具体的消息决定 
参数表 
参数 类型及说明 
handle long,要接收消息的那个窗口的句柄 
message# long,消息的标识符 
lowword long,具体取决于消息 
long long,具体取决于消息 
3、 应用举例
定义外部函数引用声明:
funcation long sendmessage (long  hwnd as long,long wmsg , long wparam,long lparam) library "user32.dll" alias for  "sendmessagea" 
funcation long releasecapture()  library "user32.dll" 
定义实例变量:
constant long lb_itemfrompoint = 425
constant long htcaption = 2
constant long wm_nclbuttondown = 161
constant long em_getline = 404
constant long em_getlinecount = 399
constant long em_getlinecount = 186
constant long em_getline = 196
constant long tvm_setitemheight = 4379
constant long em_linescroll = 182
constant long em_limittext=197
1、列表框中鼠标移动时检测位置项
powerscript:
在列表框的自定义事件ue_mousemove(pbm_mousemove)中写入如下代码:
pos = unitstopixels(parent.pointerx(),xunitstopixels!)+ unitstopixels(parent.pointery(),yunitstopixels!) * 65536
idx = sendmessage(handle(this), lb_itemfrompoint, 0, pos) if idx < 65536 then sle_1.text = lb_1.text(idx)
2、在列表框中查找匹配的项目
powerscript:
窗口的open事件:
lb_1.additem ("软件")
lb_1.additem("电脑游戏")
lb_1.additem("电视机")
lb_1.additem("电视台")
lb_1.additem("电脑")
lb_1.additem("电脑游戏软件")
singlelineedit控件的modified事件:
long li_index
li_index= sendmessage(handle(this), em_getlinecount, -1, sle_1.text)
lb_1.selectitem(li_index)
3、为listbox添加水平滚动条
powerscript:
窗口的open事件:
lb_1.additem("软件")
lb_1.additem("电脑游戏")
lb_1.additem("电视机")
lb_1.additem("电视台")
lb_1.additem("电脑")
lb_1.additem("电脑游戏软件")
sendmessage (handle(this), em_getline, 250, 0)
4、实现拖动无标题栏窗体
powerscript:
在窗口的自定义事件ue_lbuttondown(pbm_lbuttondown)
long returnval
x = releasecapture()
returnval = sendmessage(hwnd, wm_nclbuttondown, htcaption, 0)
5、获取多行文本框行数
powerscript:
commandbutton的clicked事件
messagebox(“”, sendmessage(handle(mle_1), em_getlinecount, 0, 0))
6、设置树型列表控件标题行高度
powerscript:
tv_1的constructor事件:
sendmessage(handle(tv_1), tvm_setitemheight, 60, 0)
7、突破powerbuilder中的多行文本框32k的限制
powerscript:
sendmessage(handle(mle_1), em_limittext, 65534, 0)
8、用程序代码控制文本框的滚行与滚列
powerscript:
sendmessage(handle(sle_1), em_linescroll, 0, 1)//下卷一行
sendmessage(handle(sle_1), em_linescroll, 0, -1)//上卷一行
sendmessage(handle(sle_1), em_linescroll, 1, 0)//右卷一列
sendmessage(handle(sle_1), em_linescroll, -1, 0)//左卷一列
三、结束语
在编写powerbuilder应用时,应该充分调用相关的api函数来扩充pb的一些不足。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表