利用Visual C#實現任務欄通知窗口
2007/1/27 8:32:18
想必大部分網友都使用過QQ、MSN等聊天程序,它們的界面都相當華麗,尤其是當網友上線以及消息提示時會有一個浮動的窗體從屏幕的右下方緩慢升起,既美觀又人性化,作為程序員在享受的同時我們也不禁要問:這到底是怎么實現的呢?本文就利用Visual Studio .Net C# 2005以及.Net框架繪圖技術來實現這種任務欄通知窗口。

  簡介

  QQ和MSN的任務欄通知窗口很人性化,它可以在不丟失主窗體焦點的前提下顯示一個具備皮膚Skin的通知窗體,當它顯示一段時間后會自動消失,所以用戶根本不用干預它。這樣的通知窗體和一般的具備標題欄、系統圖標和按鈕的窗體沒有太大的區別,窗體表面其實就是畫上去的一張位圖而已,而窗體的浮動則會復雜一點,我們會用到.Net框架的雙重緩沖區繪圖技術(參見作者編譯文章"Windows 窗體的.Net框架繪圖技術")來保證移動窗體時所顯示的內容平滑且不閃爍,以及使用P/Invoke平臺調用進行對Win32API函數的調用來完成不獲得焦點的窗體顯示和非標題欄窗體拖動。兩種位圖的皮膚運行時的界面如下:

   

  背景知識

  通知窗口就是將一般的窗體附加上一層皮膚,這里所謂的皮膚就是一張位圖圖片,該位圖圖片通過窗體的OnPaintbackground事件被繪制到窗體表面,在附加位圖之前需要調整窗體的可視屬性,由于繪制操作是針對于窗體客戶區域的,所謂客戶區域就是指窗體標題欄下方以及窗體邊框以內的所有區域,所以需要將窗體的邊框和外觀屬性 FormBorderStyle調整為:None,這樣所繪制的圖像就會填充整個窗體。

  首先,我們會用到Region對象,Region對象可以精確的描繪出任意形狀的輪廓范圍,通過一個位圖圖像創建Region對象后再將其傳遞給窗體的Region屬性就可以使窗體按照Region所定義的輪廓顯示出來。作為皮膚使用的位圖文件可以通過任何圖像編輯軟件諸如:Photeshop來創建和編輯,只是注意一點,需要將圖片的背景色調成特定顏色以便程序繪制時將其清除,我們在這里使用的背景色為粉紅色。為了能夠讓Region對象按照圖像中感興趣的內容邊框來創建窗體,我們還需要使用GraphicsPath類將圖像輪廓按照一定路徑標注下來,稍后便按照該路徑創建Region對象。

  然后通過窗體的繪圖事件將位圖的內容顯示在窗體表面,我們沒有直接使用OnPaintbackground事件而是重載了該方法,這樣做的好處就是一些低層的繪制操作還繼續交由.Net框架運行時來處理,我們只考慮實際需要的繪制操作即可。在OnPaintbackground方法中我們啟用了雙重緩沖區繪圖技術,所謂該技術就是指先在內存中的一塊畫布上把將要顯示的圖像顯示出來或進行處理,等到操作完成再將該畫布上所顯示的圖像放置到窗體表面,這樣的機制可以非常有效的降低閃爍的出現,使圖像顯示更加平滑。通知窗體從屏幕的右下方進行升起停留一段時間后再慢慢回落,這里需要用到返回屏幕區域的大小范圍的.Net框架方法 Screen.GetWorkingArea(WorkAreaRectangle),通過一定算法計算出通知窗體顯示前的初始位置。最后,我們將要顯示的文本按照一定格式和Rectangle對象所指定的區域范圍繪制到窗體表面。通知窗體的關閉操作是通過設定一個區域,當用戶用鼠標單擊時檢測單擊坐標是否在該區域內,若在區域內就可以執行隱藏通知窗體的代碼。

  我們注意了,當QQ和MSN的通知窗口顯示時其主窗體的焦點沒有丟失,也就是說程序沒有將自身的焦點轉移到顯示的通知窗體上。經過測試,我們無論怎么樣調用.Net框架提供的窗體顯示例程譬如:Form.Show都無法保證主窗體的焦點不丟失,在VC環境下我們可以使用Win32API的ShowWindows函數來完成復雜的窗體顯示操作,但是.Net框架根本沒有提供類似的方法,那么我們能否通過.Net框架調用該API函數來顯示窗體呢?幸好.Net框架提供了P/Invo

下一頁
返回列表
返回首頁 主站蜘蛛池模板: 疯狂三人交性欧美| 五月婷婷伊人网| 成年人网站免费观看| 亚洲AV日韩精品久久久久久| 激情图片在线视频| 四虎精品视频在线永久免费观看 | 国产熟女乱子视频正在播放| 91香蕉在线视频| 女欢女爱第一季| 中文字幕亚洲欧美日韩在线不卡| 日韩人妻一区二区三区免费| 亚洲另类激情综合偷自拍图| 永久黄色免费网站| 俄罗斯一级成人毛片| 精品无人区一区二区三区| 国产专区中文字幕| 风间由美中出黑人| 国产日产精品_国产精品毛片| 在线看片你懂的| 国产超碰人人爽人人做| bbw在线观看| 小少呦萝粉国产| 中文在线第一页| 无码人妻精品一区二区| 久久婷婷五月综合色欧美| 机巴太粗太硬弄死你| 亚洲国产成人精品无码区在线观看 | 国产成人精品高清不卡在线| 青青草原亚洲视频| 国产美女一级做a爱视频| 99在线小视频| 天堂资源bt种子在线| 一二三高清区线路1| 成人a免费α片在线视频网站| 丰满少妇被猛烈进入无码| 日本妇乱子伦视频| 久久伊人精品一区二区三区 | 又大又硬又爽又粗又快的视频免费| 色网站免费观看| 国产乱子伦农村XXXX| 都市激情综合网|