中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 数据库开发 > 数据库综合
浅谈如何利用PB实现仿QQ自动显示/隐藏窗口(三)(原创)
作者:未知 时间:2004-06-25 12:12 出处:Blog 责编:chinaitpower
              摘要:暂无

作者: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

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

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有