|
发表于 2010-11-30 10:12:13
|
显示全部楼层
本帖最后由 yhxhappy 于 2010-11-30 10:17 编辑
以下内容是很久以前在网上找到的,楼主看看,或许有帮助
API实现窗口透明、滑动、淡入淡出等动画效果(dingamao)
AW_HOR_POSITIVE (0x00000001) '从左到右打开窗口
AW_HOR_NEGATIVE (0x00000002 ) '从右到左打开窗口
AW_VER_POSITIVE (0x00000004) '从上到下打开窗口
AW_VER_NEGATIVE (0x00000008) '从下到上打开窗口
AW_CENTER (0x00000010) '若使用了AW_HIDE标志,则使窗口向内重叠;若未使用AW_HIDE标志,则使窗口向外扩展。但我的感觉是后者的效果不明显
AW_HIDE (0x00010000) '在窗体卸载时若想使用本函数就得加上此常量
AW_ACTIVATE (0x00020000) '在窗体通过本函数打开后,默认情况下会失去焦点,除非加上本常量
AW_SLIDE (0x00040000) '使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略
AW_BLEND (0x00080000) '淡入淡出效果
至于各个参数在使用时还有什么限制,比如使用哪个标志时,哪一个标志会被忽略,请大家认真查查API手册。
那么好,现在我们先来试试最简单的淡出效果。
$hwnd = GUICreate("Animate Window", 300, 300)
DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $hwnd, "int", 1000, "long", 0x00080000)
GUISetState()
动画的显示时间参数,我设为1000,也就是1秒,这是为了看得清楚些,大家可以根据实际需要更改。
大家可以先运行看看,如何,效果不错吧。
刚才举的例子只是在dwFags标志中用了一个单独的参数,可别忘记了,API手册中还说了很重要的一点:这个参数可以是一个或多个下列标志的组合。
好,举个例子~
$hwnd = GUICreate("Animate Window", 300, 300)
DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $hwnd, "int", 1000, "long", 0x00040004)
GUISetState()
出现的是从上到下滑动打开窗口,为什么呢,因为0x00040004=0x00000004+0x00040000,也就是相当于AW_VER_POSITIVE与AW_SLIDE的组合。
再给大家来一个是三个标志组合的例子:
$hwnd = GUICreate("Animate Window", 300, 300)
DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $hwnd, "int", 1000, "long", 0x00040006)
GUISetState()
嘿嘿,这次的效果就比较神奇了,乃是界面从左上角出现,滑动至左下角,因为0x00040006=0x00000004+0x00040000+0x00000002
呃,这里有必要说明一下,大家在运算的时候,最好不要过于自信,直接就相加了,有时会达不到预期的效果,为什么呢,可别忘了,这个是16进制的运算,不是我们平日习惯的10进制运算,在没有把握的时候,推荐打开开始菜单里的计算器,切换成16进制的模式来进行运算。
嗯,到这里就讲得差不多了,其实还有许多种组合方式,大家都可以自己去尝试!
最后再给大家讲一下我的发现,刚才大家可能已经发现了,GUISetState()我是放在DLLCALl的后面,如果放在前面呢?
嗯,我发现很多情况下,如果是放在前面,那么dwFags里的组合项中,最好是加上AW_HIDE这个标志,否则看不出效果,而且经过这样处理之后,效果跟原来可是不一样的,以刚才的第一个最简单的例子来说,修改为这样:
$hwnd = GUICreate("Animate Window", 300, 300)
GUISetState()
DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $hwnd, "int", 1000, "long", 0x00090000)
0x00090000=0x00090000+0x00010000,也就是加多了一个AW_HIDE,大家看看,效果是不是不一样了? |
评分
-
查看全部评分
|