作者: BALLOONMAN2002 2004年6月26日 四、颜色条滚动效果实现 1、获取该窗口的HDC(设备句柄),即在窗口的OPEN事件当中编写: 声明全局变量: long gl_hdc 声明外部函数: Function ulong GetDC(ulong hwnd) L" name="description" />

浅谈如何利用PB实现仿QQ自动显示/隐藏窗口(三)(原创)

发表于:2007-05-25来源:作者:点击数: 标签:自动实现利用浅谈显示
MI LY: 仿宋_GB2312; LETTER-SPACING: 0.2pt">作者: BALLOONMAN2002 2004年6月26日 四、颜色条滚动效果实现 1、获取该窗口的HDC(设备句柄),即在窗口的OPEN事件当中编写: 声明全局变量: long gl_hdc 声明外部函数: Function ulong GetDC(ulong hwnd) L

MILY: 仿宋_GB2312; LETTER-SPACING: 0.2pt">作者:BALLOONMAN2002  2004年6月26日

四、颜色条滚动效果实现

1、获取该窗口的HDC(设备句柄),即在窗口的OPEN事件当中编写:

声明全局变量:long gl_hdc

声明外部函数:Function ulong GetDC(ulong hwnd) LIBRARY "user32.dll"

gl_hdc = getdc(handle(this))

2、创建一个TIMING类型用户对象USER OBJECT,用于动态绘制彩色矩形:

1)首先声明该对象实例变量:

integer ii_turn

str_rect is_rect_all,is_rect_form

long il_hbrush,il_target_height,il_target_width,il_target_pace,il_height_base

2)初始化该用户对象,编写其CONSTRUCTOR事件:

ii_turn = 1

il_target_width = UnitsToPixels(w_function.width , XUnitsToPixels!)

//设置整个目标区域的宽度

il_target_height = UnitsToPixels(w_function.height , YUnitsToPixels!)

//设置整个目标区域的高度

il_target_pace = 15 //设置彩色颜色条滚动步距

il_height_base = 100 //设置彩色颜色条宽度

 

is_rect_all.left = il_target_width - UnitsToPixels(30 , XUnitsToPixels!)

is_rect_all.right = il_target_width

 

is_rect_form.top = 0

is_rect_form.bottom = il_target_height

is_rect_form.left = is_rect_all.left

is_rect_form.right = is_rect_all.right

 

il_hbrush = CreateSolidBrush(gl_backcolor)

3)开始具体编写动态颜色条滚动效果代码,即处理该对象的TIMER事件:

str_rect ls_rect_tmp

long ll_tmp,ll_ret,ll_hbrush

integer li_red,li_green,li_blue

 

if ii_turn = 1 then

    if is_rect_all.top < il_target_height - il_height_base - il_target_pace then

      is_rect_all.top = is_rect_all.top + il_target_pace

    else

      is_rect_all.top = il_target_height - il_height_base

      ii_turn = -1

    end if

else

    if is_rect_all.top > il_target_pace then

      is_rect_all.top = is_rect_all.top - il_target_pace

    else

      is_rect_all.top = 0

      ii_turn = 1

    end if

end if

 

is_rect_all.bottom = is_rect_all.top + il_height_base

 

//w_function.backcolor = gl_backcolor

 

ll_ret = FillRect(gl_hdc, is_rect_form, il_hbrush) //注:这样比上面一句效率高

 

li_red = mod(gl_backcolor,256)

li_green = Truncate(mod((gl_backcolor - li_red),65536) / 256 , 0)

li_blue = Truncate(gl_backcolor / 65536 , 0)

 

ls_rect_tmp.left = is_rect_all.left

ls_rect_tmp.right = is_rect_all.right

 

if ii_turn = 1 then

    ls_rect_tmp.bottom = is_rect_all.top

    do while ls_rect_tmp.bottom < is_rect_all.bottom

        li_red = li_red - 20  //注:这里的20决定了颜色的深浅程度       li_green = li_green - 20

        li_blue = li_blue - 20

        if li_red < 0 then

            li_red = 0

        end if

        if li_green < 0 then

            li_green = 0

        end if

        if li_blue < 0 then

            li_blue = 0

        end if

        ll_hbrush = CreateSolidBrush(rgb(li_red,li_green,li_blue))

        ls_rect_tmp.top = ls_rect_tmp.bottom

        ls_rect_tmp.bottom = ls_rect_tmp.top + 25  //注:这里的25决定了渐变的快慢程度

        ll_ret = FillRect(gl_hdc, ls_rect_tmp, ll_hbrush)

        ll_ret = Deleteobject(ll_hbrush)

    loop

else

    ls_rect_tmp.top = is_rect_all.bottom

    do while ls_rect_tmp.top > is_rect_all.top

        li_red = li_red - 20

        li_green = li_green - 20

        li_blue = li_blue - 20

        if li_red < 0 then

            li_red = 0

        end if

        if li_green < 0 then

            li_green = 0

        end if

        if li_blue < 0 then

            li_blue = 0

        end if

        ll_hbrush = CreateSolidBrush(rgb(li_red,li_green,li_blue))

        ls_rect_tmp.bottom = ls_rect_tmp.top

        ls_rect_tmp.top = ls_rect_tmp.bottom - 25

        ll_ret = FillRect(gl_hdc, ls_rect_tmp, ll_hbrush)

        ll_ret = Deleteobject(ll_hbrush)

    loop

end if

3、在主WINDOW窗口中调用此TIMING对象:

1)处理OPEN事件:iuo_timer = create uo_timer

2)处理wf_hide_h/v事件:iuo_timer.start(0.2)

3)处理CLOSE事件:destroy iuo_timer

 

至此,仿QQ自动显示/隐藏加颜色条滚动效果窗口全部完成。

由于我自己是分在两个程序当中实现上述两种效果,故无法给出完整的示意图,仅以如下两图示例:

/A-A-A/2005/07/17/20050717101609109517_1.jpg

/A-A-A/2005/07/17/20050717101609109515_2.jpg

如需要进一步资料,请联系QQ:27855043,MSN:WEIYIN2001@MSN.COM

如有不当之处,敬盼您的指点。

原文转自:http://www.ltesting.net