天天看點

[c#]可在任意位置彈出的BalloonTip

      BalloonTip通常出現在位于螢幕右下角的Tray(成為通知欄,或系統托盤)的Icon上,比如使用者插拔USB裝置時的氣泡提示。該函數位于Shell32中,是通過調用下面這個API函數實作的, BOOL Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA lpdata ); 該函數用于控制對TrayIcon進行控制,可以彈出BalloonTip。然後卻隻能局限于Tray位置。而在QQ的聊天對話框中,我們發現如果不輸入内容而試圖發送消息時,就會在按鈕上彈出這樣的Tip。為此,我在C#中寫了一個類似的視窗,可以在任意位置浮出,效果如下:

[c#]可在任意位置彈出的BalloonTip

      這是測試程式的截圖。在實作時,略微參考了codeproject上的仿MSN浮出視窗的代碼。其涉及的主要麻煩是,為了提供足夠靈活的接口,應該如何處理視窗上各個元素布局。為了簡單期間,這裡僅僅提供了“箭頭”位于右下角的布局方式。(很顯然該箭頭一共可以有8個停靠位置)。

     (1)在彈出時,不奪走其他視窗焦點。為此使用了API的ShowWindow函數: ShowWindow(this.Handle, SW_SHOWNOACTIVATE);

     (2)窗體上一共包含4項主要内容:圖示,标題,内容文本,關閉按鈕。使用者可以配置他們,例如選擇圖示(可以由外部設定或者使用内置圖示),是否顯示關閉按鈕,是否自動關閉(如果把TimeoutMilliSeconds屬性設為負數則不會自動關閉,隻能通過CloseButton關閉),各種顔色,字型等。另提供一個BalloonClick事件,通知外部使用者點選事件。

     (3)繪制CloseButton的位圖時,由于圖中具有透明色,是以需要在繪制時指定透明色,相當于蒙版的作用。否則透明色會被繪制到窗體上導緻窗體透明那個。

     (4)彈出該視窗,主要使用ShowAt()函數。裡面需要一些參數。如果需要進一步設定其他屬性,可以單獨進行設定。

       源代碼的下載下傳連結: 

繼續閱讀