国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

C++ 讓你的任務(wù)欄圖標(biāo)動起來

2019-11-17 05:12:04
字體:
供稿:網(wǎng)友

  在windows環(huán)境下上網(wǎng)時,你有沒有注重到在屏幕的右下腳的任務(wù)欄上有一個動畫圖標(biāo)呢?它一閃一閃的,形象的表示出網(wǎng)絡(luò)此時正在傳輸數(shù)據(jù)。關(guān)于任務(wù)欄圖標(biāo)編程的文章有不少,可是如何才能編制出動態(tài)圖標(biāo)呢?在C++Builder中可以比較方便的實現(xiàn)。  

  ---- 其基本編程思路是:通過設(shè)置Timer時鐘控件使應(yīng)用程序在規(guī)定的時間間隔內(nèi)發(fā)送特定的消息,使任務(wù)欄圖標(biāo)不斷更改,從而形成動畫效果。實現(xiàn)方法為在應(yīng)用程序的表單中加載幾個Image控件,使他們裝載相應(yīng)的圖畫,幾幅圖畫按順序連續(xù)的被顯示,就形成了動畫?! ?br />
  ---- 在這里,我們用一個門的開關(guān)動畫來做例子,在表單上放置一個Timer控件,兩個Image,分別裝載“開門”和“關(guān)門”兩幅圖。開始加入代碼。

  ---- 應(yīng)用程序必須用發(fā)送消息的辦法通知任務(wù)欄增加,刪除,和修改圖標(biāo)。發(fā)送消息必須調(diào)用Shell_NotifyIcon。它的原形為:  

  WINSHELLAPI BOLL WINAPI Shell_NotifyIcon(

  DWord dwMessage, POINTIFYCONDATA pnid);  

  第一個參數(shù) dwMessage是發(fā)送消息的標(biāo)志,可以選

  NIM_ADD // 往任務(wù)欄通知區(qū)添加圖標(biāo)

  NIM_DELETE //往任務(wù)欄通知區(qū)刪除圖標(biāo)

  NIM_MODIFY //通知任務(wù)欄通知區(qū)修改圖標(biāo)  

  編制消息發(fā)送函數(shù)TrayMessage

  bool __fastcall TForm1::TrayMessage(DWORD dwMessage)

  {

   NOTIFYICONDATA tnd;

   PSTR pszTip;

   pszTip = TipText();

   tnd.cbSize= sizeof(NOTIFYICONDATA);

   //結(jié)構(gòu)的大小

   tnd.UCallbackMessage = MYWM_NOTIFY;

   //自定義回調(diào)消息,在頭文件中聲明

   tnd.hWnd= Handle;

   //接受回調(diào)消息的窗口句柄

   tnd.uID = IDC_MYICON;

   //圖標(biāo)標(biāo)志號

  tnd.uFlags= NIF_MESSAGE   NIF_ICON   NIF_TIP;

  //指定以下三個參數(shù)哪個包含有效數(shù)據(jù)

   if (dwMessage == NIM_MODIFY)

   {

   tnd.hIcon =

  (HICON)IconHandle(); //取得圖標(biāo)句柄

   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));

  }

  編制取得圖標(biāo)句柄的函數(shù)

  HICON __fastcall TForm1::IconHandle(void)

  {

  if (n==1)

  { return (Image1- >Picture->Icon- >Handle);

   //n是全局變量,1為顯示Image1,0為Image2

   }

   else

   { return (Image2- >Picture- >Icon- >Handle);

   }


  }

  編制圖標(biāo)狀態(tài)轉(zhuǎn)換函數(shù)  

  void __fastcall TForm1::ToggleState(void)

  {

   if (n==1) //n為圖標(biāo)句柄鎖,是全局變量,

  1為顯示Image1,0為Image2

   {

   n=n-1;

   }

   else

   {

   n=n+1;

   }

   TrayMessage(NIM_MODIFY);

   //發(fā)送圖標(biāo)變換消息

  }  

  對Timer控件編制代碼,設(shè)它的Interval

  屬性為1000,即定時器每一秒響應(yīng)一次。為 Ontimer

  事件鍵入代碼:  

  void __fastcall TForm1::Timer1Timer(TObject *Sender)

  { ToggleState( );

   }

  ---- 由于篇幅有限,以上只列出了基本部分的代碼,其他功能的實現(xiàn),如關(guān)閉程序,打開窗口等,比較簡單,不在贅述。程序運行時,你將看到在屏幕的右下角任務(wù)欄有一扇門打開又關(guān)閉的動畫圖標(biāo)。是不是很有趣,快編一個你喜歡的吧. 更多文章 更多內(nèi)容請看C/C++技術(shù)專題專題,或

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 梁平县| 三河市| 上思县| 建阳市| 乌苏市| 阿克苏市| 溧水县| 安乡县| 双辽市| 宜川县| 鄂尔多斯市| 双峰县| 贵德县| 缙云县| 马山县| 同德县| 奎屯市| 平山县| 宁强县| 湘乡市| 苏尼特左旗| 龙陵县| 罗山县| 湖州市| 敦煌市| 咸宁市| 沁源县| 米易县| 青铜峡市| 蓝山县| 建瓯市| 饶河县| 蓬安县| 长沙市| 白河县| 蓝山县| 井研县| 襄汾县| 梧州市| 郁南县| 习水县|