?? vcc41.htm
字號:
<html>
<head>
<title>c++系列</title>
<meta content="text/html; charset=gb2312" http-equiv=Content-Type>
</head>
<p align="center"><script src="../../1.js"></script></a>
<body bgcolor="#ffffff" leftmargin="5" topmargin="1" marginheight="5" marginwidth="5">
<div align=center>
<table border=0 cellpadding=0 cellspacing=0 width=680 align="center">
<tbody>
<tr>
<td width=200 height="59">
</tr>
</tbody>
</table>
<table border=1 bordercolordark=#ffffff bordercolorlight=#ffffff cellpadding=0
cellspacing=0 width=685 align="center" height="70">
<tbody>
<tr>
<td bgcolor=#F9D23C height=14>
<div align=center class=H1> <b><span class="unnamed1">C++BUILDER讓你的任務欄圖標動起來
</span></b></font></div>
</td>
</tr>
<tr valign=top>
<td class=H1 height=212>
<p align="center"><font
color=#ffa000><b> </b></font></p>
<h4 align="left"> 在windows環境下上網時,你有沒有注意到在屏幕的右下腳的任務欄上有一個動畫圖標呢?它一閃一閃的,形象的表示出網絡此時正在傳輸數據。關于任務欄圖標編程的文章有不少,可是如何才能編制出動態圖標呢?在C++Builder中可以比較方便的實現。<br>
<br>
其基本編程思路是:通過設置Timer時鐘控件使應用程序在規定的時間間隔內發送特定的消息,使任務欄圖標不斷更改,從而形成動畫效果。實現方法為在應用程序的表單中加載幾個Image控件,使他們裝載相應的圖畫,幾幅圖畫按順序連續的被顯示,就形成了動畫。<br>
<br>
在這里,我們用一個門的開關動畫來做例子,在表單上放置一個Timer控件,兩個Image,分別裝載“開門”和“關門”兩幅圖。開始加入代碼。<br>
<br>
應用程序必須用發送消息的辦法通知任務欄增加,刪除,和修改圖標。發送消息必須<br>
調用Shell_NotifyIcon。它的原形為:<br>
<br>
WINSHELLAPI BOLL WINAPI Shell_NotifyIcon(<br>
DWORD dwMessage, POINTIFYCONDATA pnid);<br>
<br>
第一個參數 dwMessage是發送消息的標志,可以選 <br>
NIM_ADD // 往任務欄通知區添加圖標<br>
NIM_DELETE //往任務欄通知區刪除圖標<br>
NIM_MODIFY //通知任務欄通知區修改圖標<br>
<br>
<b>編制消息發送函數TrayMessage</b><br>
bool __fastcall TForm1::TrayMessage(DWORD dwMessage)<br>
{<br>
NOTIFYICONDATA tnd;<br>
PSTR pszTip;<br>
pszTip = TipText();<br>
tnd.cbSize= sizeof(NOTIFYICONDATA); <br>
//結構的大小<br>
tnd.uCallbackMessage = MYWM_NOTIFY;<br>
//自定義回調消息,在頭文件中聲明<br>
tnd.hWnd= Handle;<br>
//接受回調消息的窗口句柄<br>
tnd.uID = IDC_MYICON;<br>
//圖標標志號<br>
tnd.uFlags= NIF_MESSAGE | NIF_ICON | NIF_TIP;<br>
//指定以下三個參數哪個包含有效數據<br>
if (dwMessage == NIM_MODIFY)<br>
{<br>
tnd.hIcon = <br>
(HICON)IconHandle(); //取得圖標句柄<br>
if (pszTip)<br>
lstrcpyn(tnd.szTip, pszTip, <br>
sizeof(tnd.szTip));<br>
else<br>
tnd.szTip[0] = '\0';<br>
}<br>
else<br>
{<br>
tnd.hIcon = NULL;<br>
tnd.szTip[0] = '\0';<br>
}<br>
return (Shell_NotifyIcon(dwMessage, &tnd));<br>
}<br>
<b>編制取得圖標句柄的函數</b><br>
HICON __fastcall TForm1::IconHandle(void)<br>
{<br>
if (n==1) <br>
{ return (Image1- >Picture->Icon- >Handle);<br>
//n是全局變量,1為顯示Image1,0為Image2<br>
}<br>
else<br>
{ return (Image2- >Picture- >Icon- >Handle);<br>
}<br>
}<br>
<b>編制圖標狀態轉換函數</b><br>
<br>
void __fastcall TForm1::ToggleState(void)<br>
{<br>
if (n==1) //n為圖標句柄鎖,是全局變量,<br>
1為顯示Image1,0為Image2<br>
{<br>
n=n-1;<br>
}<br>
else<br>
{<br>
n=n+1;<br>
}<br>
TrayMessage(NIM_MODIFY);<br>
//發送圖標變換消息<br>
}<br>
<br>
<br>
對Timer控件編制代碼,設它的Interval屬性為1000,即定時器每一秒響應一次。為 Ontimer事件鍵入代碼:<br>
<br>
void __fastcall TForm1::Timer1Timer(TObject *Sender)<br>
{ ToggleState( );<br>
}<br>
<br>
由于篇幅有限,以上只列出了基本部分的代碼,其他功能的實現,如關閉程序,打開窗口等,比較簡單,不在贅述。程序運行時,你將看到在屏幕的右下角任務欄有一扇門打開又關閉的動畫圖標。是不是很有趣,快編一個你喜歡的吧。<br>
轉載自C++Builder園地 </span></font></h4>
</td>
</tr>
</tbody>
</table>
</div>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -