写在前面
这是PB案例学习笔记系列文章的第11篇,该系列文章适合具有一定PB基础的读者。
通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。
文章中设计到的源码,小凡都上传到了gitee代码仓库https://gitee.com/xiezhr/pb-project-example.git

需要源代码的小伙伴们可以自行下载查看,后续文章涉及到的案例代码也都会提交到这个仓库【**pb-project-example**】
如果对小伙伴有所帮助,希望能给一个小星星⭐支持一下小凡。
一、小目标
本篇文章,我们要实现通过user32动态库的AnimateWindow 函数实现窗口的动画效果。
用Randomize 函数实现动画效果的随机控制。最终效果如下

二、AnimateWindow 函数简介
① 语法
function boolean AnimateWindow ( long hwnd, long dwtime, long dwflags ) library "user32"
② 参数说明
hWnd:
- 类型:
HWND
- 描述:指向要进行动画效果的窗口的句柄。获取窗口句柄可能需要通过特定的函数或属性,比如对于顶级窗口,可以使用
Open事件的Parent参数或者窗口对象的句柄属性。
dwTime:
- 类型:
DWORD
- 描述:动画持续的时间,单位为毫秒。例如,500表示动画持续半秒。
dwFlags:
- 类型:
DWORD
- 描述:指定动画类型和方向的标志。可以是以下值的组合:
AW_HOR_POSITIVE(水平从左到右)
AW_HOR_NEGATIVE(水平从右到左)
AW_VER_POSITIVE(垂直从上到下)
AW_VER_NEGATIVE(垂直从下到上)
AW_CENTER(窗口从中心扩大或缩小)
AW_HIDE(隐藏窗口,缺省则显示窗口)
AW_ACTIVATE(激活窗口)
AW_SLIDE(滑动效果)
AW_BLEND(淡入淡出效果,需要Windows 2000或更高版本)
三、创建程序基本框架
① 新建工作区
② 新建exampleapp应用
③ 新建w_main 窗口。Title 设置为动画视窗
以上步骤如果忘记了的小伙伴可以翻一翻第一篇文章
④ 往窗口中添加控件
在w_main窗口中添加一个按钮控件cb_1,调整位置,将Text属性设置成开启动画视窗

⑤ 新建w_animate 窗口
将窗口Title 设置为动画窗口,并将其Center属性设置为False

⑥ 往w_animate 窗口 中添加控件
在w_animate 窗口中添加一个MultiLineEdit控件和一个CommandButton控件,分别命名为mle_1 和cb_2
将mle_1 的Text值设置为:这是一个动态视窗,通过这个窗口演示动态窗口效果,将cb_2的Text值设置为关闭

⑦ 保存窗口
四、编写代码
① 在w_main窗口中的cb_1按钮的Clicked事件中添加如下代码
open(w_animate)
② 在w_animate窗口的Declare Instance Variables 选项卡中添加如下实例变量
constant long AW_HOR_POSITIVE = 1
constant long AW_HOR_NEGATIVE = 2
constant long AW_VER_POSITIVE = 4
constant long AW_VER_NEGATIVE = 8
constant long AW_CENTER = 16
constant long AW_HIDE = 65526
constant long AW_ACTIVATE = 131072
constant long AW_SLIDE = 262144
constant long AW_BLEND = 524288
③ 在本地外部扩展函数(Local External Functions) 选项中添加如下代码
function boolean AnimateWindow ( long hwnd, long dwtime, long dwflags ) library "user32"
④ 在w_animate窗口的open事件中添加如下代码
long ll_handle
//获取当前窗口的句柄
ll_handle = Handle ( This )
//初始化随机数种子,确保每次运行都有不同的动画效果
Randomize ( 0 )
// 根据随机数选择不同的动画效果
Choose Case rand ( 6 )
Case 1
// 淡入并从底部向上滑动窗口
// AW_SLIDE启用滑动效果
// AW_VER_POSITIVE表示垂直方向从下到上
// AW_ACTIVATE激活窗口
AnimateWindow(ll_handle,1000,AW_SLIDE+AW_VER_POSITIVE+AW_ACTIVATE)
Case 2
// 淡入并从顶部向下滑动窗口
// 同上,但AW_VER_NEGATIVE表示垂直方向从上到下
AnimateWindow(ll_handle,1000,AW_SLIDE+AW_VER_NEGATIVE+AW_ACTIVATE)
Case 3
// 淡入并向右滑动窗口
// 同上,但AW_HOR_POSITIVE表示水平方向从左到右
AnimateWindow(ll_handle,1000,AW_SLIDE+AW_HOR_POSITIVE+AW_ACTIVATE)
Case 4
// 淡入并向左滑动窗口
// 同上,但AW_HOR_NEGATIVE表示水平方向从右到左
AnimateWindow(ll_handle,1000,AW_SLIDE+AW_HOR_NEGATIVE+AW_ACTIVATE)
Case 6,5
// 淡入并从中心展开窗口
// 同上,但AW_CENTER表示窗口从中心扩大或缩小
AnimateWindow(ll_handle,1000,AW_SLIDE+AW_CENTER+AW_ACTIVATE)
End Choose
⑤ 在w_animate 窗口的Close事件中添加如下代码
long ll_handle
//获取该窗口句柄
ll_handle = Handle(This)
//动画关闭窗口
AnimateWindow(ll_handle,300,AW_SLIDE+AW_HIDE+AW_CENTER)
⑥ 在w_animate窗口的Clicked事件中添加如下代码
Close(w_animate)
⑦ 在开发界面左边的System Tree 窗口中双击exampleapp应用对象,在其Open事件中添加如下代码
open(w_main)
五、运行程序
运行程序,最终效果如下所示
