一引言
在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具体取决于消息
应用举例
定义外部函数引用声明
funcation long SendMessage (long hwnd As Longlong wMsg long wParamlong lParam) Library userdll Alias for SendMessageA
funcation long ReleaseCapture() Library userdll
定义实例变量
Constant long LB_ITEMFROMPOINT =
Constant long HTCAPTION =
Constant long WM_NCLBUTTONDOWN =
Constant long EM_GETLINE =
Constant long EM_GETLINECOUNT =
Constant long EM_GETLINECOUNT =
Constant long EM_GETLINE =
Constant long TVM_SETITEMHEIGHT =
Constant long EM_LINESCROLL =
Constant long EM_LIMITTEXT=
列表框中鼠标移动时检测位置项
Powerscript:
在列表框的自定义事件ue_mousemove(pbm_mousemove)中写入如下代码
pos = unitstopixels(parentpointerx()XUnitsToPixels!)+ unitstopixels(parentpointery()yUnitsToPixels!) *
idx = SendMessage(handle(this) LB_ITEMFROMPOINT pos) If idx < Then sle_Text = lb_text(idx)
在列表框中查找匹配的项目
Powerscript:
窗口的open事件
[] []