您的位置信息之舟电 脑硬件栏目首页数据库类PowerBuilder 收藏本页

→ PowerBuilder制作IE风格的图标按钮一

www.kepusoft.com 信息之舟电脑软件应用栏目

    信息之舟电脑软件应用栏目编者按: ---- 本文介绍在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
    ---- 6、定义用户事件:  

    // *******************************
    // Declare User Events
    // *******************************
    Event Name="mousemove",   ID="pbm_mousemove"
    Event Name="lbuttondown", ID="pbm_lbuttondown"
    Event Name="lbuttonup",   ID="pbm_lbuttonup"

www.kepusoft.com 信息之舟电脑之家收集整理推荐文章