最近公司的事情不多,自己實現了一個簡單的功能,算是一個demo,功能極其簡單,而且我們還經常遇到起。
就是在右下角漸層的彈出一個提示框出來,有點類似於QQ或MSN那訊息提示功能.(從下往上漸層顯示出來)
當然可以進行其他擴充(如對表單美化,內容控制等),這裡只是一個很簡單的實現。就沒有考慮那麼多了。
下面是主要的代碼:(主要是調用了系統的API函數實現漸層效果)。其實就是調用了這個函數產生了漸層效果,從下往上顯示
[DllImport("user32")]
private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);
const int AW_HOR_POSITIVE = 0x0001;
const int AW_HOR_NEGATIVE = 0x0002;
const int AW_VER_POSITIVE = 0x0004;
const int AW_VER_NEGATIVE = 0x0008;
const int AW_CENTER = 0x0010;
const int AW_HIDE = 0x10000;
const int AW_ACTIVATE = 0x20000;
const int AW_SLIDE = 0x40000;
const int AW_BLEND = 0x80000;
調用代碼就省略了哈。
下面是這個API函數的相關說明(參考網路其他資源)
//添加引用
using System.Runtime.InteropServices;
//聲明API
[DllImport("user32")]
private static extern bool AnimateWindow(IntPtr hwnd,int dwTime, int dwFlags);
const int AW_HOR_POSITIVE = 0x0001;
const int AW_HOR_NEGATIVE = 0x0002;
const int AW_VER_POSITIVE = 0x0004;
const int AW_VER_NEGATIVE = 0x0008;
const int AW_CENTER = 0x0010;
const int AW_HIDE = 0x10000;
const int AW_ACTIVATE = 0x20000;
const int AW_SLIDE = 0x40000;
const int AW_BLEND = 0x80000;
//表單載入時的動畫效果API
AnimateWindow(this.Handle,1000, AW_VER_NEGATIVE |AW_ACTIVATE);//從下到上且不佔其它程式焦點
/*下面是AnimateWindow的具體說明
AnimateWindow API
函數AnimateWindow.
儘管MSDN頁面上說這個函數是Win2000的最新函數,但經網友證實在Win98裡就已經有這個函數了:
Private Declare Function AnimateWindow Lib "user32" (ByVal hwnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Long
其中:
hwnd只對Form有效,其他像Picture1都無法產生效果。
dwTime是動畫持續的時間,預設為200。
dwFlags可取以下值:
AW_HOR_POSITIVE ( &H1 ) '從左至右開啟視窗
AW_HOR_NEGATIVE ( &H2 ) '從右至左開啟視窗
AW_VER_POSITIVE ( &H4 ) '從上到下開啟視窗
AW_VER_NEGATIVE ( &H8 ) '從下到上開啟視窗
AW_CENTER ( &H10 ) '看不出任何效果
AW_HIDE (&H10000) '在表單卸載時若想使用本函數就得加上此常量
AW_ACTIVATE (&H20000) '在表單通過本函數開啟後,預設情況下會失去焦點,除非加上本常量
AW_SLIDE (&H40000) '看不出任何效果
AW_BLEND (&H80000) '淡入淡出效果
最後一個就是我要找的,遺憾的是只對Win2000有效。
另外還有一個要點是:如何讓彈出的表單在右下角:也很簡單,供參考:
Code
int x = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Size.Width-this.Width;
int y = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Size.Height-this.Height;
this.SetDesktopLocation(x, y);
好了,關鍵代碼都出來了,由於只是一個很小的功能demo,沒怎麼具體最佳化。這裡只供提供一種思路。有興趣的朋友可以自己去進行擴充:
原始碼下載:MessageShowDemo
資料參考: http://www.cnblogs.com/risen/archive/2008/01/15/1039751.html
Charles Chen
MSN:gotosunny@msn.com