【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.pswp.cn/bicheng/18478.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18478.shtml
英文地址,請注明出處:http://en.pswp.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…