程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 仿QQ會員右下角提示框c#實現,提示窗體不獲得焦點

仿QQ會員右下角提示框c#實現,提示窗體不獲得焦點

編輯:C#入門知識

雖說有不獲得焦點的窗體的例子,可是我並不知道怎麼實現,所以還是讓自己的這樣 "不獲得焦點的窗體"先獲得,然後再把焦點還給他之前的那個焦點窗體

剛開始想的不用API,用Application.OpenForms得到自己程序所有窗體,然後再顯示自己,當然就會得到焦點,然後以前的

有焦點的就會有失去焦點的事件,但沒出來,換API,思路大至一樣.

用到API

        [System.Runtime.InteropServices.DllImport("user32.dll")]
        public static extern IntPtr GetActiveWindow();//獲得當前活動窗體
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        public static extern IntPtr SetActiveWindow(IntPtr hwnd);//設置活動窗體

QQ的那提示框可以有焦點,只是不點它,不搶焦點而已

      那我要做的就是第一次顯示時"不搶焦點"

     寫個成員變量

      private IntPtr actform=IntPtr.Zero;//保存自己得到焦點前擁有活動窗體的柄

      private bool isFristShow=true;//標識是否是首次加載

      在構造聚函數裡加入

      actform = GetActiveWindow();

      重寫Form的OnActivated方法

         protected override void OnActivated(EventArgs e)
        {
            base.OnActivated(e);


            if (hwnd != IntPtr.Zero && isFristShow)
            {
                SetActiveWindow(hwnd);

                //已不再是首次加載,下次就可以有焦點了

                 isFristShow= false;
            }
        }

我只想到這麼多了,誰有更好的方法教下我QQ:122281069

另還再說一個問題

在上面提到的鏈接中有一個叫"codingsilence"的說了這個

"用Windows Api實現的效果比你這個好多了,代碼是你這個的十分之一"

我也來實現下好了,不過不知道和他想的是否一樣,當然有利有弊,先給出代碼,再談得失

先把API 寫上

        // 函數功能:該函數能在顯示與隱藏窗口時能產生特殊的效果。有兩種類型的動畫效果:滾動動畫和滑動動畫

        [System.Runtime.InteropServices.DllImport("user32.dll")]
        public static extern void AnimateWindow(IntPtr hwnd, int stime, int style);

可以在加載和關閉還有其它事件裡使用這個函數

這裡只寫一個打開時的效果例子,因為簡單,不多寫了,在窗體裡加入這個

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

             //第二個參數就是漸變的時間了
            AnimateWindow(this.Handle, 2000, 0x80000/*AW_BLEND*/);
        }

哈,強吧,一句話就搞了那麼復雜的效果,不過他的缺點就是,這個時間長的話,最好用多線程

因為這個函數要執行裡面設置的那以長時間,會造成這一時間段同一線程上的其它界面不響應用戶操作的,不過總體來說還是這個好

 都看到這了,可不可以頂下啊...

    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved