网站导航:首页 -> 软件水平考试 -> 系统工程师考试认证 -> PowerBuilder制作IE风格的图标按钮

PowerBuilder制作IE风格的图标按钮

  本文介绍在powerbuilder中实现ie风格的图标按钮的技巧。在c++ builder开发工具中,有一种图标按钮(speedbutton),这种按钮可以在鼠标移入按钮后,在图片的周围会出现凸出的边框,鼠标移出按钮后边框消失。而在powerbuilder中没有提供这种功能的按钮,为了使开发的应用程序界面更丰富,我们使用自定义图形控件(picture)扩展并实现了此功能,这种方法设计出的程序简洁实用。

  一、实现功能

  按钮可以显示四种状态图形:

  1、normal状态;

  2、disabled状态;

  3、mouseover状态(鼠标进入按钮区);

  4、clickdown状态(鼠标按下)。

  二、关键方法

  1、当鼠标进入按钮区域时,控件图片改换成mouseover状态的图片,并设置状态信号;

  2、鼠标滑入按钮区域后用windows api函数setcapture来捕获鼠标输入消息,跟踪鼠标位置;

  3、当监测到鼠标滑出按钮区域时,用releasecapture函数释放鼠标捕获,恢复按钮图片到normal状态并设置状态信号;

  4、改变控件的图片(picturename)前,先用releasecapture释放鼠标捕获,然后改变picturename属性值,接着重新调用setcapture函数,因为改变图片后powerbuilder重新建立了控件窗口,窗口的句柄(hwnd)也随之改变了。

  三、设计过程

  1、新建“user object” -〉选择visual的standard类 -〉选择“picture”;

  2、定义全局的或局部的外部函数:

// declare external functions

function ulong setcapture
(ulong hwnd) library 'user32.dll'
function boolean releasecapture
(ulong hwnd) library 'user32.dll'
function boolean drawedge(ulong hdc,
ref rect qrc, uint edge, uint grfflags)
library 'user32.dll'
  
  3、定义结构数据类型

rect
{
long left
long top
long right
long bottom
}
---- 4、定义控件共享变量:

// declare shared variables

boolean sb_suppresshoverborder

  5、定义控件实例变量:

// declare instance variables

private:
boolean ib_mousecaptured

public:
string is_picnormal
string is_picdisabled
string is_picmouseover
string is_picclickdown
int in_state