程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++ BUILDER讓任務欄圖標動起來

C++ BUILDER讓任務欄圖標動起來

編輯:關於C++

在windows環境下上網時,你有沒有注意到在屏幕的右下腳的任務欄上有一個動畫圖標呢?它一閃一閃的,形象的表示出網絡此時正在傳輸數據。關於任務欄圖標編程的文章有不少,可是如何才能編制出動態圖標呢?在C++Builder中可以比較方便的實現。

其基本編程思路是:通過設置Timer時鐘控件使應用程序在規定的時間間隔內發送特定的消息,使任務欄圖標不斷更改,從而形成動畫效果。實現方法為在應用程序的表單中加載幾個Image控件,使他們裝載相應的圖畫,幾幅圖畫按順序連續的被顯示,就形成了動畫。

在這裡,我們用一個門的開關動畫來做例子,在表單上放置一個Timer控件,兩個Image,分別裝載“開門”和“關門”兩幅圖。開始加入代碼。

應用程序必須用發送消息的辦法通知任務欄增加,刪除,和修改圖標。發送消息必須

調用Shell_NotifyIcon。它的原形為:

WINSHELLAPI BOLL WINAPI Shell_NotifyIcon(

DWORD dwMessage, POINTIFYCONDATA pnid);

第一個參數 dwMessage是發送消息的標志,可以選

NIM_ADD // 往任務欄通知區添加圖標

NIM_DELETE //往任務欄通知區刪除圖標

NIM_MODIFY //通知任務欄通知區修改圖標

編制消息發送函數TrayMessage

bool __fastcall TForm1::TrayMessage(DWORD dwMessage)
{
NOTIFYICONDATA tnd;
PSTR pszTip;
pszTip = TipText();
tnd.cbSize= sizeof(NOTIFYICONDATA);
//結構的大小
tnd.uCallbackMessage = MYWM_NOTIFY;
//自定義回調消息,在頭文件中聲明
tnd.hWnd= Handle;
//接受回調消息的窗口句柄
tnd.uID = IDC_MYICON;
//圖標標志號
tnd.uFlags= NIF_MESSAGE | NIF_ICON | NIF_TIP;
//指定以下三個參數哪個包含有效數據
if (dwMessage == NIM_MODIFY)
{
tnd.hIcon =
(HICON)IconHandle(); //取得圖標句柄
if (pszTip)
lstrcpyn(tnd.szTip, pszTip,
sizeof(tnd.szTip));
else
tnd.szTip[0] = '\0';
}
else
{
tnd.hIcon = NULL;
tnd.szTip[0] = '\0';
}
return (Shell_NotifyIcon(dwMessage, &tnd));
}

編制取得圖標句柄的函數

HICON __fastcall TForm1::IconHandle(void)
{
if (n==1)
{ return (Image1- >Picture->Icon- >Handle);
//n是全局變量,1為顯示Image1,0為Image2
}
else
{ return (Image2- >Picture- >Icon- >Handle);
}
}

編制圖標狀態轉換函數

void __fastcall TForm1::ToggleState(void)
{
if (n==1) //n為圖標句柄鎖,是全局變量,
1為顯示Image1,0為Image2
{
n=n-1;
}
else
{
n=n+1;
}
TrayMessage(NIM_MODIFY);
//發送圖標變換消息
}
   對Timer控件編制代碼,設它的Interval屬性為1000,即定時器每一秒響應一次。為 Ontimer事件鍵入代碼:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{ ToggleState( );
}

由於篇幅有限,以上只列出了基本部分的代碼,其他功能的實現,如關閉程序,打開窗口等,比較簡單,不在贅述。程序運行時,你將看到在屏幕的右下角任務欄有一扇門打開又關閉的動畫圖標。是不是很有趣,快編一個你喜歡的吧.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved