托盤編程

 1.托盤操作

      函數原型: BOOL Shell_NotifyIcon( DWORD dwMessage,PNOTIFYICONDATA lpdata);

      返回值

            如果圖標操作成功返回TRUE,否則返回FALSE。

            如果dwMessage參數設爲NIM_SETVERSION,則如果版本設置成功返回TRUE,如果設置的版本不支持返回FALSE。

      參數說明:
      >dwMessage爲輸入參數,傳遞發送的消息,表明要執行的操作。可選的值如下:

  NIM_ADD

  向托盤區域添加一個圖標。此時第二個參數lpdata指向的NOTIFYICONDATA結構體中的hWnd和uID成員用來標示這個圖標,以便以後再次使用Shell_NotifyIcon對此圖標操作。

  NIM_DELETE

  刪除托盤區域的一個圖標。此時第二個參數lpdata指向的NOTIFYICONDATA結構體中的hWnd和uID成員用來標示需要被刪除的這個圖標。

  NIM_MODIFY

  修改托盤區域的一個圖標。此時第二個參數lpdata指向的NOTIFYICONDATA結構體中的hWnd和uID成員用來標示需要被修改的這個圖標。

      注意:在修改圖標的時候,只需要修改NOTIFYICONDATA的hIcon就行了。呵呵我們再做閃爍托盤的時候經常用到哦!

  NIM_SETFOCUS

  Version 5.0. 設置焦點。比如當用戶操作托盤圖標彈出菜單,而有按下ESC鍵將菜單消除後,程序應該使用此消息來將焦點設置到托盤圖標上。

  NIM_SETVERSION

  Version 5.0. 設置任務欄按照第二個參數lpdata指向的NOTIFYICONDATA結構體中的uVersion成員指定的版本號來工作。此消息可以允許用戶設置是否使用基於Windows2000的version 5.0的風格。uVersion的缺省值爲0,默認指明瞭使用原始Windows 95圖標消息風格。具體這兩者的區別請參考msdn中的Shell_NotifyIcon函數說明的Remarks。

  >lpdata爲輸入參數,是指向NOTIFYICONDATA結構體的指針,結構體內容用來配合第一個參數wMessage進行圖標操作

          NOTIFYICONDATA 結構體說明:

 

             typedef struct _NOTIFYICONDATA {

  DWORD cbSize;    //大小

  HWND hWnd;       //窗口的句柄

  UINT uID;             //應用程序定義的任務欄圖標的標識符

  UINT uFlags;        //標誌:此成員表明具體哪些其他成員爲合法數據

  UINT uCallbackMessage;//回調消息

  HICON hIcon;       //增加、修改或刪除的圖標的句柄

  TCHAR szTip[64]; //提示信息串(/0)結束

  DWORD dwState; //圖標狀態。NIS_HIDDEN(隱藏)/NIS_SHAREDICON (共享)

  DWORD dwStateMask;//指明dwState成員的那些位可以被設置或者訪問

  TCHAR szInfo[256];//氣球提示內容,刪除該內容:設置uFlags成員爲NIF_INFO,同時將szInfo設爲空

  union {

  UINT uTimeout;//氣球提示的時間

  UINT uVersion;//圖標版本

  };

  TCHAR szInfoTitle[64];//氣球提示標題

  DWORD dwInfoFlags;//氣球提示框增加一個圖標。在氣球提示標題的左側,szInfoTitle成員設爲空字符串,則圖標也不會顯示.

  GUID guidItem;//保留成員

  } NOTIFYICONDATA, *PNOTIFYICONDATA;

 

    注意:

      標誌成員uFlags可取的值:

            NIF_ICON             hIcon成員起作用。
              NIF_MESSAGE  uCallbackMessage成員起作用。

          NIF_TIP                szTip成員起作用。
              NIF_STATE            dwState和dwStateMask成員起作用。
              NIF_INFO              使用氣球提示代替普通的工具提示框。szInfo, uTimeout, szInfoTitle和dwInfoFlags成員起作用。
              NIF_GUID             保留。

      標誌成員dwInfoFlags可取的值:

             NIIF_ERROR  錯誤圖標。

         NIIF_INFO  信息圖標。

         NIIF_NONE  沒有圖標。

         NIIF_USER  使用用戶使用hIcon成員指明的圖標,要求Windows XP Service Pack 2 (SP2)或以後系統。

         NIIF_WARNING  警告圖標。

         NIIF_ICON_MASK  Version 6.0. 保留。

         NIIF_NOSOUND Version 6.0. 禁止播放相應聲音。

      

2.消息處理

        剛纔我們看到了,對於托盤的消息我們是可以添加響應消息函數的,如下:

        >定義消息ID

             #define WM_NOTIFYSHELL     WM_USER+100

        >定義響應函數

              LRESULT OnNotificationPan (WPARAM wParam, LPARAM lParam);

        >添加消息映射

              ON_MESSAGE(WM_NOTIFYSHELL, OnNotificationPan)  

        >實現OnNotificationPan

              LRESULT CTest::OnNotificationPan(WPARAM wParam, LPARAM lParam)
                {
                      switch ( lParam )
                          {
                                case WM_RBUTTONDOWN:
                                              break;
                                 case WM_LBUTTONDBLCLK:
                                               break;
                                  default:
                                             break;
                            }
                        return 0;
                }

      3.實例

  m_notifyData.cbSize    = sizeof (NOTIFYICONDATA);//m_notifyData是頭文件定義的成員
  m_notifyData.hWnd    = m_hWnd;
  m_notifyData.uID    = IDR_MAINFRAME;
  m_notifyData.uFlags    = NIF_ICON|NIF_MESSAGE|NIF_TIP;
  m_notifyData.uCallbackMessage = WM_NOTIFYSHELL;
  m_notifyData.hIcon    = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

    //WTL使用  LoadIcon(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME));
  

   lstrcpy(m_notifyData.szTip, GATEWAY_INFO);
  Shell_NotifyIcon(NIM_ADD, &m_notifyData);

 

 

 

    托盤其實就是這麼簡單,哈哈,OVER。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章