【PB案例学习笔记】-11动画显示窗口

写在前面

这是PB案例学习笔记系列文章的第11篇,该系列文章适合具有一定PB基础的读者。

通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。

文章中设计到的源码,小凡都上传到了gitee代码仓库https://gitee.com/xiezhr/pb-project-example.git

gitee代码仓库

需要源代码的小伙伴们可以自行下载查看,后续文章涉及到的案例代码也都会提交到这个仓库【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_1cb_2

mle_1Text值设置为:这是一个动态视窗,通过这个窗口演示动态窗口效果,将cb_2Text值设置为关闭

添加控件

⑦ 保存窗口

四、编写代码

① 在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)

五、运行程序

运行程序,最终效果如下所示

动画视窗

本期内容到这儿就结束了,希望对您有所帮助。 ★,°:.☆( ̄▽ ̄)/$:.°★
我们下期再见 ヾ(•ω•`)o (●’◡’●)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/18478.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ESP32 - Micropython ESP-IDF 双线教程 WIFI (2)

ESP32 - Micropython ESP-IDF 双线教程 WIFI ESP32 - IDF WIFI转换为ESP32-IDF的示例代码main/main.c 代码解释 ESP32 - IDF WIFI 转换为ESP32-IDF的示例代码 以下是使用ESP-IDF(Espressif IoT Development Framework)编写的连接到Wi-Fi网络的示例代码…

颈源性头痛症状及表

颈源性头痛一般表现为,就是说从枕后一直颞侧,到太阳穴附近,这个是枕小的一个疼痛,还有一部分人从枕后,沿着一个弧线(如下图)的轨迹到了前额,到我们前额,这样一个疼痛&…

Bitbucket的原理及应用详解(一)

本系列文章简介: 在数字化和全球化的今天,软件开发和项目管理已经成为企业成功的关键因素之一。随着团队规模的扩大和项目的复杂化,如何高效地协同开发、管理代码和确保代码质量成为了开发者和管理者面临的重要挑战。Bitbucket作为一款功能强…

深入解析线程上下文切换:掌握线程上下文切换的核心原理

1. 进程与线程的基本概念 1.1 进程与线程的区别 在操作系统中,进程和线程是两个基本的概念,它们共同构成了程序的执行环境。了解它们的区别是理解线程上下文切换的基础。 进程:进程是程序的一次执行实例。它是操作系统资源分配的基本单位。…

pytest的断言与Selenium 模拟操作的一个例子

在Python中,pytest是一个流行的单元测试框架,而Selenium是一个用于自动化浏览器操作的工具。结合这两者,我们可以编写自动化测试脚本来验证网页的行为是否符合预期。下面是一个简单的例子,展示了如何使用pytest的断言功能以及Sele…

解决在Mac下使用npm报错:Error: EACCES: permission denied

原因说明:没有足够的权限在 /usr/local/lib/node_modules 目录下创建文件夹 这个错误表明你在安装或更新 Vue.js(vue)包时,没有足够的权限在 /usr/local/lib/node_modules 目录下创建文件夹。这通常是因为默认情况下,普…

【头歌-Python】文件自学引导

禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/139258793 参考教程:B站视频讲解——https://space.bilibili.com/3546616042621301 如果代码存在问题,麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 文件自学引导 第…

算数运算符

算术运算符是用于数值类型变量计算的运算符。 它的返回结果是数值。 赋值符号 关键知识点:先看右侧,再看左侧,把右侧的值赋值给左侧的变量。 附上代码: string myName "唐唐"; int myAge 18; float myHeight 177.5…

202312青少年软件编程(Python)等级考试试卷(四级)

第 1 题 【单选题】 下列有关分治算法思想的描述不正确的是?( ) A :将问题分解成的子问题具有相同的模式 B :将问题分解出的各个子问题相互之间有公共子问题 C :当问题足够小时,可以直接求解 D :可以将子问题的求解结果合并成原问题的解 正确答案:B 试题解析: 第 2…

ADIL简单测试实例

参考资料:https://blog.csdn.net/geyichongchujianghu/article/details/130045373这个连接是Java的代码,我根据它的链接写了一个kotlin版本的。 AIDL(Android Interface Definition Language)是Android平台上用于进程间通信&…

AI办公自动化:kimi批量新建文件夹

工作任务:批量新建多个文件夹,每个文件夹中的年份不一样 在kimi中输入提示词: 你是一个Python编程专家,要完成一个编写关于录制电脑上的键盘和鼠标操作的Python脚本的任务,具体步骤如下: 打开文件夹&…

FFmpeg编解码的那些事(1)

看了网上很多ffmpeg的编解码的文章和代码,发现有很多文章和代码都过时了,主要还是ffmpeg有很多接口都已经发生变化了。 这里简单说一下,什么是编码和解码。 1.视频编码 对于视频来说,可以理解为多张(rgb或者yuv&…

Python散点图矩阵代码模版

本文分享Python seaborn实现散点图矩阵代码模版,节选自👉嫌Matplotlib繁琐?试试Seaborn! 散点图矩阵(scatterplot matrix)展示原始数据中所有变量两两之间关系,可以规避单一统计指标的偏差&…

二分查找算法详讲(三种版本写法)原创

介绍: 二分查找算法(Binary Search)是一种在有序数组中查找目标元素的算法。 它的基本思想是通过将目标元素与数组的中间元素进行比较,从而将搜索范围缩小一半。 如果目标元素等于中间元素,则搜索结束;如果目标元素小…

Neural Filters:照片恢复

Ps菜单:滤镜/Neural Filters/恢复/照片恢复 Neural Filters/RESTORATION/Photo Restoration 照片恢复 Photo Restoration借助 AI 强大功能快速恢复旧照片,提高对比度、增强细节、消除划痕。将此滤镜与着色相结合以进一步增强效果。 “照片恢复”滤镜利用…

Scikit-Learn随机森林

Scikit-Learn随机森林 1、随机森林1.1、集成学习1.2、Bagging方法1.3、随机森林算法1.4、随机森林的优缺点2、Scikit-Learn随机森林回归2.1、Scikit-Learn随机森林回归API2.2、随机森林回归实践(加州房价预测)1、随机森林 随机森林是一种由决策树构成的集成算法,它在大多情况…

mac安装的VMware虚拟机进行桥接模式配置

1、先进行网络适配器选择,选择桥接模式 2、点击网络适配器 设置... 3、选择WiFi(我使用的是WiFi,所以选择这个),注意看右边的信息:IP和子网掩码,后续配置虚拟机的ifcfg-ens文件会用到 4、编辑if…

【论文阅读笔记】The Google File System

1 简介 Google File System (GFS) 是一个可扩展的分布式文件系统,专为快速增长的Google数据处理需求而设计。这篇论文发表于2003年,此前已在Google内部大规模应用。 GFS不仅追求性能、可伸缩性、可靠性和可用性等传统分布式文件系统的设计目标&#xf…

benchmark::State benchmark 原理

benchmark::State benchmark::State是Google Benchmark库中的一个核心类,用于管理单个基准测试的状态信息和控制基准测试的执行流程。在编写基准测试时,这个类提供了一套丰富的接口,允许用户获取测试循环的次数、调整测试参数、测量时间等&a…

P9 【力扣+知识点】【算法】【二分查找】C++版

【704】二分查找(模板题)看到复杂度logN,得想到二分 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标&#xff0…