• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: 小 中 大 | 推荐给好友 上一篇 | 下一篇

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

发布: 2007-7-02 11:08 | 作者: admin | 来源: | 查看: 10次 | 进入软件测试论坛讨论

领测软件测试网
作者: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自动显示/隐藏加颜色条滚动效果窗口全部完成。

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

http://blog.csdn.net/images/blog_csdn_net/balloonman2002/17312/r_AUTOHIDE.JPG

http://blog.csdn.net/images/blog_csdn_net/balloonman2002/17312/r_SCROLL_EFF.JPG

如需要进一步资料,请联系QQ:27855043,MSN:[email protected]

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

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:[email protected] 电话:010-51297073

软件测试 | 领测国际 | ISTQB | ISTQB官网 | TMMi | TMMi认证 | 国际软件测试工程师认证 | 领测软件测试网