C#調(diào)用Windows的API實(shí)現(xiàn)窗體動(dòng)畫(huà)
在VF、VB、PB的應(yīng)用中,有些無(wú)法通過(guò)語(yǔ)言工具本身來(lái)完成的或者做得不理想的功能,我們會(huì)考慮通過(guò)Windows的API來(lái)完成。
在那個(gè)年代,熟悉API是一個(gè)編程者的基本功。那個(gè)時(shí)候網(wǎng)絡(luò)信息也不發(fā)達(dá),很多資料只能考購(gòu)買書(shū)籍或者自己摸索來(lái)獲取,每次掌握一個(gè)新的API應(yīng)用內(nèi)心里都有點(diǎn)小激動(dòng)。
Powerbuilder數(shù)據(jù)功能強(qiáng)大,但是界面功能尤其是動(dòng)畫(huà)功能比較弱,通過(guò)調(diào)用Windows的API實(shí)現(xiàn)窗體動(dòng)畫(huà)比較容易。
聲明API調(diào)用:
function boolean AnimateWindow ( long hwnd, long dwtime, long dwflags ) library "user32"
聲明常量:
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 conDAT* ? ?stant long AW_SLIDE = 262144 constant long AW_BLEND = 524288
在窗體的open事件中調(diào)用:
long ll_handle ll_handle = Handle ( This ) Randomize ( 0 ) Choose Case rand ( 6 ) Case 1 AnimateWindow ( ll_handle, 1000, AW_SLIDE + AW_VER_POSITIVE + AW_ACTIVATE ) Case 2 AnimateWindow ( ll_handle, 1000, AW_SLIDE + AW_VER_NEGATIVE+ AW_ACTIVATE ) Case 3 AnimateWindow ( ll_handle, 1000, AW_SLIDE + AW_HOR_POSITIVE + AW_ACTIVATE ) Case 4 AnimateWindow ( ll_handle, 1000, AW_SLIDE + AW_HOR_NEGATIVE + AW_ACTIVATE ) Case 6,5 AnimateWindow ( ll_handle, 1000, AW_SLIDE + AW_CENTER + AW_ACTIVATE ) End Choose
在C#中調(diào)用Windows的API來(lái)實(shí)現(xiàn)動(dòng)畫(huà)也一樣容易。
引用:
using System.Runtime.InteropServices;
定義常量:
public const Int32 AW_HOR_POSITIVE = 0x00000001; public const Int32 AW_HOR_NEGATIVE = 0x00000002; public const Int32 AW_VER_POSITIVE = 0x00000004; public const Int32 AW_VER_NEGATIVE = 0x00000008; public const Int32 AW_CENTER = 0x00000010; public const Int32 AW_HIDE = 0x00010000; public const Int32 AW_ACTIVATE = 0x00020000; public const Int32 AW_SLIDE = 0x00040000; public const Int32 AW_BLEND = 0x00080000;
定義調(diào)用:
[DllImportAttribute("user32.dll")] private static extern bool AnimateWindow(IntPtr hwnd,int dwTime,int dwFlags);
調(diào)用:
private void Form1_Load(object sender, EventArgs e) { //this.FormBorderStyle =0 ; Random rand = new Random(); long LL = rand.Next(1,6); label1.Text = "動(dòng)畫(huà)演示:"+LL.ToString(); switch (LL) { case 1: AnimateWindow(this.Handle, 1000, AW_SLIDE + AW_VER_POSITIVE + AW_ACTIVATE); break; case 2: AnimateWindow(this.Handle, 1000, AW_SLIDE + AW_VER_NEGATIVE + AW_ACTIVATE); break; case 3: AnimateWindow(this.Handle, 1000, AW_SLIDE + AW_HOR_POSITIVE + AW_ACTIVATE); break; case 4: AnimateWindow(this.Handle, 1000, AW_SLIDE + AW_HOR_NEGATIVE + AW_ACTIVATE); break; case 5: AnimateWindow(this.Handle, 1000, AW_SLIDE + AW_CENTER + AW_ACTIVATE); break; case 6: AnimateWindow(this.Handle, 1000, AW_SLIDE + AW_CENTER + AW_ACTIVATE); break; } }
效果圖
到此這篇關(guān)于C#調(diào)用Windows的API實(shí)現(xiàn)窗體動(dòng)畫(huà)的文章就介紹到這了,更多相關(guān)C# API實(shí)現(xiàn)窗體動(dòng)畫(huà)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)將文件轉(zhuǎn)換為XML的方法
這篇文章主要介紹了C#實(shí)現(xiàn)將文件轉(zhuǎn)換為XML的方法,實(shí)例分析了office文件與xml的相互轉(zhuǎn)換技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-12-12WPF運(yùn)行時(shí)替換方法實(shí)現(xiàn)mvvm自動(dòng)觸發(fā)刷新
這篇文章主要為大家詳細(xì)介紹了WPF運(yùn)行時(shí)如何實(shí)現(xiàn)setter不需要調(diào)方法就可以自動(dòng)觸發(fā)界面刷新,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04C#中遍歷DataSet數(shù)據(jù)集對(duì)象實(shí)例
這篇文章主要介紹了C#中遍歷DataSet數(shù)據(jù)集對(duì)象實(shí)例,經(jīng)常忘記如何操作DataSet,這里記下來(lái)并分享,讓需要的朋友可以參考下2014-08-08UnityShader使用速度映射圖實(shí)現(xiàn)運(yùn)動(dòng)模糊
這篇文章主要為大家詳細(xì)介紹了UnityShader使用速度映射圖實(shí)現(xiàn)運(yùn)動(dòng)模糊,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02C#之關(guān)于Base64簡(jiǎn)單加密與解密方式
這篇文章主要介紹了C#之關(guān)于Base64簡(jiǎn)單加密與解密方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06C#制作網(wǎng)站掛機(jī)程序的實(shí)現(xiàn)示例
本文主要介紹了C#制作網(wǎng)站掛機(jī)程序,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10