其實,在 Borland C++ Builder 5.0 中編寫Tray程序是件很簡單的事。在安裝 Borland C++ Builder 5.0 時選擇Full(完全)安裝,安裝完成後,在Samples組件頁中有一個TrayIcon組件,它封裝編寫Tary所需的Window API函數,使用該組件編寫Tary程序不用加一句程序代碼,真是易如反掌。
首先,我們先看一下TrayIcon組件常用的屬性:
屬性說明
Animate設為true時,順序更改Icons屬性設置的圖標
AnimateInterva設置更改圖標的時間(單位:毫秒)
Hide設為true時,最小化時隱藏在任務欄上的標題欄
Hint設置鼠標移動到Tary圖標上出現的提示信息
IconIndex設置圖標索引值
Icons設置圖標源(通常設置一個ImageList組件)
PopupMenu設置要彈出的菜單(通常設置一個PopupMenu組件)
PopupMenuOn設置觸發彈出菜單的鼠標操作
RestoreOn設置恢復最小化到正常狀態的鼠標操作
Visible設為true時,在任務欄最右邊顯示圖標
鼠標操作說明:
值說明
imClick鼠標單擊
imDoubleClick鼠標雙擊
imLeftClickUp單擊鼠標左鍵,放開
imLeftDoubleClick雙擊鼠標左鍵
imMouseDown按下鼠標鍵
imMouseUp按下鼠標鍵,放開
imNone不設置鼠標操作
imRightClickUp單擊鼠標右鍵,放開
imRightDoubleClick雙擊鼠標右鍵
TrayIcon組件的事件、方法就不多說了。
下面讓我們來編一個簡單的Tary程序:
1、新建工程,添加一個TrayIcon組件、一個PopupMenu組件和一個ImageList組件。它們的Name屬性都用默認的名字:TrayIcon1、PopupMenu1、ImageList1。
2、設置TrayIcon1的屬性,如下:
屬性值 linux
Animate true
AnimateInterva 1000
Hide true
Hint Tary演示程序
IconIndex 0
Icons ImageList1
Name TrayIcon1
PopupMenu PopupMenu1
PopupMenuOn imRightClickUp
RestoreOn imDoubleClick
Visible true
3、雙擊PopupMenu1,彈出菜單設計器,隨意地加入幾個菜單項。
4、雙擊ImageList1,加入支持的圖片(*.ico、*.bmp)。
到此,不用編寫一句程序代碼,一個簡單的Tary程序就做好了。按F9編譯運行,將鼠標移動到Tary上面就會出現“Tary演示程序”的提示信息;在Tary上單擊鼠標右鍵彈出菜單Popmenu1;按下程序窗口的最小化按鈕,程序最小化後隱藏任務欄上的標題欄;雙擊Tary將會恢復程序最小化;而且,Tary圖標以1000毫秒(1秒)的速度變換。夠簡單了吧?!
TaryIcon組件的演示源程序在 Borland C++ Builder 5.0 安裝目錄下的CBuilder5ExamplesAppsTrayIcon。若你不想使用TaryIcon組件編寫Tary,只想使用API函數,可以參考安裝目錄CBuilder5ExamplesControlsTraydemo下的源程序。
要在任務欄放圖標,要用到Shell_NotifyIcon(DWORD dwMessage, PNOTIFYICONDATA pnid)函數。第二個參數是一個結構體,其中有一個回調消息,因此要自定義一個消息。
#define WM_NOTIFYICOM WM_USER+5
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_NOTIFYICOM, TMessage, NotifyIcom)
END_MESSAGE_MAP(TForm)
上三個語句是宏定義,具體用法,你可看幫助
接著就要寫定義的WM_NOTIFYICOM 消息的響應函數。
//此函數用來響應鼠標在圖標上的操作
void __fastcall TMainForm::NotifyIcom(Tmessage msg)
{
POINT MousePos;
switch(msg.LParam)
{
case WM_RBUTTONUP://響應右鍵
......
}
}
void __fastcall TMainForm::TrayMessage(DWORD dwMessage)
{
NOTIFYICOMDATA tnd;
tnd.cbSize=sizeof(NOTIFYICOMDATA);
tnd.hWnd=Handle;
tnd.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
//前面的程序就是為了實現這個回調消息
tnd.uCallbackMessage=WM_NOTIFYICOM;
//這個變量實現圖標的加載
tnd.hIcon=myIcon-> Handle;
lstrcpyn(tnd.szTip, "my TrayIcom ", sizeof(tnd.tip));
return(Shell_NotifyIcon(dwMessage, &tnd));
}
大概就是這麼做了,具體有不明的,你看書吧