winform 右下角彈出小窗口


   
就好像騰訊QQ右下角彈出動態新聞那樣的效果,只不過我的這個效果,窗口時慢慢往上跑出來的,而不是一下子就都出來了。
這個技術,用的比較多的是軟件聯網獲取數據,然后通過這種方式讓用戶看到。
關於winform客戶端聯網獲取數據的內容,請參考我的博客
 
一般情況下,這個功能肯定是由主線程的一個子線程來完成的,關於多線程部分的簡介,請參見我的博客 http://www.cnblogs.com/zdkai/archive/2012/07/10/2584832.html
 
下面來說明一下,怎么讓winform的右下角彈出一個小窗口。
首先添加引用:
 
  using System.Runtime.InteropServices;   
 
 
然后,聲明幾個簡單的win32api 和幾個窗口消息。如果這一塊你沒用過,沒關系,把代碼粘到你的項目里就行了,保證沒有錯誤。
 
        /// <summary>   
        /// 窗體動畫函數    注意:要引用System.Runtime.InteropServices;   
        /// </summary>   
        /// <param name="hwnd">指定產生動畫的窗口的句柄</param>   
        /// <param name="dwTime">指定動畫持續的時間</param>   
        /// <param name="dwFlags">指定動畫類型,可以是一個或多個標志的組合。</param>   
        /// <returns></returns>   
        [DllImport("user32")]
        private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);
        //下面是可用的常量,根據不同的動畫效果聲明自己需要的   
        private const int AW_HOR_POSITIVE = 0x0001;//自左向右顯示窗口,該標志可以在滾動動畫和滑動動畫中使用。使用AW_CENTER標志時忽略該標志   
        private const int AW_HOR_NEGATIVE = 0x0002;//自右向左顯示窗口,該標志可以在滾動動畫和滑動動畫中使用。使用AW_CENTER標志時忽略該標志   
        private const int AW_VER_POSITIVE = 0x0004;//自頂向下顯示窗口,該標志可以在滾動動畫和滑動動畫中使用。使用AW_CENTER標志時忽略該標志   
        private const int AW_VER_NEGATIVE = 0x0008;//自下向上顯示窗口,該標志可以在滾動動畫和滑動動畫中使用。使用AW_CENTER標志時忽略該標志該標志   
        private const int AW_CENTER = 0x0010;//若使用了AW_HIDE標志,則使窗口向內重疊;否則向外擴展   
        private const int AW_HIDE = 0x10000;//隱藏窗口   
        private const int AW_ACTIVE = 0x20000;//激活窗口,在使用了AW_HIDE標志后不要使用這個標志   
        private const int AW_SLIDE = 0x40000;//使用滑動類型動畫效果,默認為滾動動畫類型,當使用AW_CENTER標志時,這個標志就被忽略   
        private const int AW_BLEND = 0x80000;//使用淡入淡出效果   
 
 然后,注冊兩個事件,在這兩個事件里面調用剛才聲明的win32api ,傳幾個參數,就搞定了。
 
        private void FrmMsg_Load(object sender, EventArgs e)
        {
            int x = Screen.PrimaryScreen.WorkingArea.Right - this.Width;
            int y = Screen.PrimaryScreen.WorkingArea.Bottom - this.Height;
            this.Location = new Point(x, y);//設置窗體在屏幕右下角顯示   
            AnimateWindow(this.Handle, 1000, AW_SLIDE | AW_ACTIVE | AW_VER_NEGATIVE);
        }
        private void FrmMsg_FormClosing(object sender, FormClosingEventArgs e)
        {
            AnimateWindow(this.Handle, 1000, AW_BLEND | AW_HIDE);
        }


免責聲明!

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



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