一般的, 當我們啟動一個應用程序後, 普通的應用程序窗口都是瞬間顯示到屏幕上. 您是 否想象過這樣一種情景 : 打開一個應用程序後, 窗口的顯示跟幻燈片一樣變幻莫測,豐富多 彩? 也許不能登大雅之堂, 但至少可以娛樂自己.
好了, 進入正題: 您現在可以想 象這樣一幅畫面: 當您啟動一個應用程序後, 顯示器中央出現一個小點, 然後慢慢變大, 向 四周不斷擴展, 直到窗口全部顯示. 而當您關閉它時它又會從上向下慢慢地從顯示器中消 失....這將是什麼效果? 呵呵, 如果您願意, 下面就跟著我一起完成這樣一個偉大的夢想 吧.
設計思路是什麼呢? 如果您很聰明, 會馬上意識到這個工程很可能要用到 Windows提供 API. 上網一查, 果然有一個函數 : AnimateWindow, 它可以實現窗體的動畫效 果. 所以剩下的工作就是查看 MSDN, 了解更多的關於 AnimateWindow 函數的信息.
下面結合本例詳細介紹 AnimateWindow 函數在 C#中的應用.
聲明方式:
聲明
[DllImportAttribute("user32.dll")]
private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);
參數說明:
Code
(1). IntPtr hwnd: 目標窗口 的句柄對象, 一般為 this.Handle
(2). int dwTime: 動畫的持續時間, 數值越大動 畫效果的時間越長
(3). int dwFlags: 動畫效果類型選項, 在C#中聲明如下:
注: 您程序中只聲明需要的動畫類型即可, 關於每個參數的含義會在後面詳細說明
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;
動畫效果類型詳細說明表:
1. AW_SLIDE : 使用滑動類型 , 默認為該類型. 當使用 AW_CENTER 效果時, 此效果被忽略
2. AW_ACTIVE: 激活窗 口, 在使用了 AW_HIDE 效果時不可使用此效果
3. AW_BLEND: 使用淡入效果
4. AW_HIDE: 隱藏窗口
5. AW_CENTER: 與 AW_HIDE 效果配合使用則效果為窗 口幾內重疊, 單獨使用窗口向外擴展.
6. AW_HOR_POSITIVE : 自左向右顯示窗口
7. AW_HOR_NEGATIVE: 自右向左顯示窗口
8. AW_VER_POSITVE: 自頂向下顯示 窗口
9. AW_VER_NEGATIVE : 自下向上顯示窗口
看懂了這些, 下面我們的工作 會變得非常簡單.
啟動程序後, 動畫效果顯示窗口的代碼如下:
Code
AnimateWindow(this.Handle, 1000, AW_SLIDE + AW_CENTER);
而關閉程序 後, 動畫效果顯示窗口代碼如下:
Code
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
AnimateWindow(this.Handle, 500, AW_SLIDE + AW_VER_POSITIVE + AW_HIDE);
}
程序的完整代碼如下:
Code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace FalshWindows
{
public partial class Form1 : Form
{
[DllImportAttribute ("user32.dll")]
private static extern bool AnimateWindow (IntPtr hwnd, int dwTime, int dwFlags);
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;
public Form1()
{
InitializeComponent();
AnimateWindow(this.Handle, 1000, AW_SLIDE + AW_CENTER);
}
private void Form1_FormClosed (object sender, FormClosedEventArgs e)
{
AnimateWindow(this.Handle, 500, AW_SLIDE + AW_VER_POSITIVE + AW_HIDE);
}
}
}
後記: 雖為一雕蟲小技,但蘊涵著很多思想, 大 家可以眼高, 但手一定要底.
必得原理,編程是件很快樂的事.
文章來源: http://www.cnblogs.com/ziyiFly/archive/2008/09/18/1293327.html