本文介绍在PowerBuilder中实现IE风格的图标按钮的技巧
在C++ Builder开发工具中
有一种图标按钮(SpeedButton)
这种按钮可以在鼠标移入按钮后
在图片的周围会出现凸出的边框
鼠标移出按钮后边框消失
而在PowerBuilder中没有提供这种功能的按钮
为了使开发的应用程序界面更丰富
我们使用自定义图形控件(Picture)扩展并实现了此功能
这种方法设计出的程序简洁实用
一实现功能
按钮可以显示四种状态图形
Normal状态
Disabled状态
MouseOver状态(鼠标进入按钮区)
ClickDown状态(鼠标按下)
二关键方法
当鼠标进入按钮区域时
控件图片改换成MouseOver状态的图片
并设置状态信号
鼠标滑入按钮区域后用Windows API函数SetCapture来捕获鼠标输入消息跟蹤鼠标位置
当监测到鼠标滑出按钮区域时用ReleaseCapture函数释放鼠标捕获恢复按钮图片到Normal状态并设置状态信号
改变控件的图片(PictureName)前先用ReleaseCapture释放鼠标捕获然后改变PictureName属性值接着重新调用SetCapture函数因为改变图片后PowerBuilder重新建立了控件窗口窗口的句柄(hWnd)也随之改变了
三设计过程
新建User Object 〉选择Visual的Standard类 〉选择Picture
定义全局的或局部的外部函数
// Declare External Functions
function ulong SetCapture
(ulong hwnd) library userdll
function boolean ReleaseCapture
(ulong hwnd) library userdll
function boolean DrawEdge(ulong hdc
ref rect qrc uint edge uint grfFlags)
library userdll
定义结构数据类型
RECT
{
long left
long top
long right
long bottom
}
定义控件共享变量
// Declare Shared Variables
boolean sb_SuppressHoverBorder
[] [] [] []