1. 程式人生 > >c++如何設定托盤圖示並閃爍

c++如何設定托盤圖示並閃爍

首先要用到標頭檔案

#include"shellapi.h"

然後,定義一個托盤物件

NOTIFYICONDATA nid = { 0 };//托盤圖示

接著,我們需要填充裡面的值

nid.cbSize = sizeof(NOTIFYICONDATA);//長度
 nid.hWnd = hWnd;//視窗控制代碼
 nid.uID = IDI_SMALL;//圖示的ID,這個在資原始檔裡面的Icon裡面
 nid.hIcon = ::LoadIcon(hInst, MAKEINTRESOURCE(IDI_SMALL));//載入圖示進去
 nid.uCallbackMessage = WM_NOTIFYICON;//這個是點選圖示的事件訊息,我們在訊息處理函式WndProc()裡面寫一個case WM_NOTIFYICON:去處理滑鼠點選圖示事件
 nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;//圖示樣式
 _tcscpy(nid.szTip, _T("科學閱讀器"));//當滑鼠移動到圖示的時候顯示

這樣我們就設定好了物件了。

接著,我們需要用到一個函式

Shell_NotifyIcon(NIM_ADD, &nid); //這個函式的意思就是告訴系統增加一個托盤圖示,這時候,就可以看到右下角有圖示了

為了要圖示閃爍起來,我們需要一個定時器

SetTimer(hWnd, 1, 500, NULL);//第一個引數是視窗控制代碼,就是每500毫秒向視窗傳送一個WM_TIMER的訊息,第二個引數是計時器ID,第三個是時間,第四個為NULL。

全部都設定好了,接下來,就要在訊息處理函式WndProc()裡面去實現閃爍了:在全域性定義一個bool型的變數。

case WM_TIMER://這是計時器發來的訊息
  if (time == true){//time是我在全域性定義的一個變數用來計算是更改正確的圖示還是空圖示的
   nid.hIcon =NULL;//當為空的時候,說明右下角已經有圖示了,所以我要把圖示設定為空,然後傳送更改圖示的資訊給系統Shell_NotifyIcon(NIM_MODIFY, &nid);
   Shell_NotifyIcon(NIM_MODIFY, &nid);//更改托盤圖示
   time = time-1;
  }
  else{//如果沒有,我就要傳送一個有圖示的物件給系統
   nid.hIcon = ::LoadIcon(hInst, MAKEINTRESOURCE(IDI_SMALL));
   Shell_NotifyIcon(NIM_MODIFY, &nid);//更改托盤圖示
   time = time + 1;
  }

最後,我們要來處理滑鼠點選圖示的事件

不要忘了把計時器關閉,否則,圖示會一直閃爍,還有不要忘了去釋放圖示物件哦

 ShowWindow(hWnd, 10);//當然當點選後我們要把視窗顯示出來。

KillTimer(hWnd, ID_TIMER);//第一引數是視窗控制代碼,第二個是計時器ID,就是關閉那個計時器