|
|
SendMessage API函数在PowerBuilder中应用 |
|
|
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 |
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的一些不足。

|
|
相关文章:相关软件: |
|