C#:實現窗口的淡入淡出效果


來自:http://baike.baidu.com/view/1080291.htm

使用函數:AnimateWindow

說明該函數能在顯示與隱藏窗口時能產生特殊的效果。

函數原型

  BOOL AnimateWindow(HWND hWnd,DWORD dwTime,DWORD dwFlags);

  BOOL AnimateWindow(DWORD dwTime,DWORD dwFlags);

參數說明

hWnd:指定產生動畫的窗口的句柄。
dwTime:指明動畫持續的時間(以微秒計),完成一個動畫的標准時間為200微秒。
dwFags:指定動畫類型。這個參數可以是一個或多個下列標志的組合。標志描述:
AW_SLIDE:使用滑動類型。缺省則為滾動動畫類型。當使用AW_CENTER標志時,這個標志就被忽略。
AW_ACTIVATE:激活窗口。在使用了AW_HIDE標志后不要使用這個標志。
AW_BLEND:使用淡出效果。只有當hWnd為頂層窗口的時候才可以使用此標志。
AW_HIDE:隱藏窗口,缺省則顯示窗口。
AW_CENTER:若使用了AW_HIDE標志,則使窗口向內重疊;若未使用AW_HIDE標志,則使窗口向外擴展。
AW_HOR_POSITIVE:自左向右顯示窗口。該標志可以在滾動動畫和滑動動畫中使用。當使用AW_CENTER標志時,該標志將被忽略。
AW_VER_POSITIVE:自頂向下顯示窗口。該標志可以在滾動動畫和滑動動畫中使用。當使用AW_CENTER標志時,該標志將被忽略。
AW_VER_NEGATIVE:自下向上顯示窗口。該標志可以在滾動動畫和滑動動畫中使用。當使用AW_CENTER標志時,該標志將被忽略。
AW_HOR_NEGATIVE:自右向左顯示窗口。該標志可以在滾動動畫和滑動動畫中使用。當使用AW_CENTER標志時,該標志將被忽略。
各個數值:
const Int32 AW_HOR_POSITIVE = 0x00000001;  
  const Int32 AW_HOR_NEGATIVE = 0x00000002;  
  const Int32 AW_VER_POSITIVE = 0x00000004;  
  const Int32 AW_VER_NEGATIVE = 0x00000008;  
  const Int32 AW_CENTER = 0x00000010;  
  const Int32 AW_HIDE = 0x00010000;  
  const Int32 AW_ACTIVATE = 0x00020000;  
  const Int32 AW_SLIDE = 0x00040000;  
  const Int32 AW_BLEND = 0x00080000; 
返回值:
如果函數成功,返回值為非零;如果函數失敗,返回值為零。在下列情況下函數將失敗:
窗口使用了窗口邊界;窗口已經可見仍要顯示窗口;窗口已經隱藏仍要隱藏窗口。
備注:
可以將AW_HOR_POSITIVE或AW_HOR_NEGTVE與AW_VER_POSITVE或AW_VER_NEGATIVE組合來激活一個窗口。可能需要在該窗口的窗口過程和它的子窗口的窗口過程中處理WM_PRINT或WM_PRINTCLIENT消息。對話框,控制,及共用控制已處理WM_PRINTCLIENT消息,缺省窗口過程也已處理WM_PRINT消息。
 
速查:
WINDOWS NT:5.0以上版本:Windows:98以上版本;Windows CE:不支持;頭文件:Winuser.h;庫文件:user32.lib。
 
例子:
在C#中,使用AnimateWindow需要導入:using System.Runtime.InteropServices;
接着,在程序中寫入該函數相關的數據:
[DllImport("user32.dll", EntryPoint = "AnimateWindow")]//或[DllImport("user32.dll", CharSet=CharSet.Auto)] [DllImport("user32.dll")] 
        private static extern bool AnimateWindow(IntPtr handle, int ms, int flags);
        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; 
然后,在該窗體中調用即可,例如:
AnimateWindow(this.Handle, 300, AW_CENTER);//從里向外顯示
 AnimateWindow(this.Handle, 300, AW_HIDE + AW_CENTER);//向內消失效果
                            //可用“+”將效果鏈接起來
 
          
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;//窗體效果需要該包

namespace 軟件項目管理系統
{
    public partial class LoginForm : Form
    {
        //窗體彈出或消失效果
        [DllImport("user32.dll", EntryPoint = "AnimateWindow")]
        private static extern bool AnimateWindow(IntPtr handle, int ms, int flags);
        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 LoginForm()
        {
            InitializeComponent();

            //窗體彈出效果
            AnimateWindow(this.Handle, 300, AW_CENTER);
        }

        //“關閉按鈕”事件
        private void button1_Click(object sender, EventArgs e)
        {
            //窗體彈出效果
            AnimateWindow(this.Handle, 300, AW_HIDE + AW_CENTER);

            Application.Exit();
        }
    }
}
 
          

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM