BalloonTip通常出現在位於螢幕右下角的Tray(成為通知欄,或系統托盤)的Icon上,比如使用者插拔USB裝置時的氣泡提示。該函數位於Shell32中,是通過調用下面這個API函數實現的, BOOL Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA lpdata ); 該函數用於控制對TrayIcon進行控制,可以彈出BalloonTip。然後卻只能局限於Tray位置。而在QQ的聊天對話方塊中,我們發現如果不輸入內容而試圖發送訊息時,就會在按鈕上彈出這樣的Tip。為此,我在C#中寫了一個類似的視窗,可以在任意位置浮出,效果如下:
這是測試程式的。在實現時,略微參考了codeproject上的仿MSN浮出視窗的代碼。其涉及的主要麻煩是,為了提供足夠靈活的介面,應該如何處理視窗上各個元素布局。為了簡單期間,這裡僅僅提供了“箭頭”位於右下角的布局方式。(很顯然該箭頭一共可以有8個固定位置)。
(1)在彈出時,不奪走其他視窗焦點。為此使用了API的ShowWindow函數: ShowWindow(this.Handle, SW_SHOWNOACTIVATE);
(2)表單上一共包含4項主要內容:表徵圖,標題,內容文本,關閉按鈕。使用者可以配置他們,例如選擇表徵圖(可以由外部設定或者使用內建表徵圖),是否顯示關閉按鈕,是否自動關閉(如果把TimeoutMilliSeconds屬性設為負數則不會自動關閉,只能通過CloseButton關閉),各種顏色,字型等。另提供一個BalloonClick事件,通知外部使用者點擊事件。
(3)繪製CloseButton的位元影像時,由於圖中具有透明色,因此需要在繪製時指定透明色,相當於蒙版的作用。否則透明色會被繪製到表單上導致表單透明那個。
(4)彈出該視窗,主要使用ShowAt()函數。裡面需要一些參數。如果需要進一步設定其他屬性,可以單獨進行設定。
原始碼的下載連結:
http://files.cnblogs.com/hoodlum1980/JDL.UILib_BalloonTip_VS7.rar