// タスクトレイアイコンクラス // (C)2002,2003 Yutaka Wada, AirparkLab /* 使い方 // アイコンからのウインドウメッセージの定義 #define MY_NOTIFYICON (WM_APP+100) // オブジェクトの確保 CTasktrayIcon m_TasktrayIcon; // OnInitDialog() などでタスクトレイアイコンの初期化 m_TasktrayIcon.Create( this->m_hWnd, 1, NIF_MESSAGE|NIF_ICON|NIF_TIP, AfxGetApp()->LoadIcon(IDR_MAINFRAME), MY_NOTIFYICON, "TEST" ); // アイコンを表示する時 m_TasktrayIcon.Add(); // アイコンを消去するとき m_TasktrayIcon.Delete(); // アイコンからのメッセージを受け取るウインドウは WindowProc() を以下のように実装する。 LRESULT C????::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { if( message == MY_NOTIFYICON ){ if( lParam == WM_LBUTTONDBLCLK ){ // アイコンが左ダブルクリックされたときの処理 } } return CDialog::WindowProc(message, wParam, lParam); } // 後処理は必要ありません。デストラクタで行われます。 パブリックメンバ関数は以下の通り。 // コンストラクタ CTasktrayIcon(); // 初期化 void Create( HWND hWnd, UINT uID, UINT uFlags, UINT uCallbackMessage, HICON hIcon, CHAR *pTip ); 引数 HWND hWnd タスクトレイアイコンからのメッセージを受けるウインドウハンドル UINT uID アイコンID?(よく分からないが1で良いみたい) UINT uFlags 動作フラグ?(とりあえずNIF_MESSAGE|NIF_ICON|NIF_TIPで良いみたい) UINT uCallbackMessage タスクトレイアイコンからのウインドウメッセージ(ユーザ定義しておくこと) HICON hIcon 表示するアイコンのハンドル CHAR *pTip アイコンにマウスをかざした時に表示されるチップ文字列へのアドレス // チップ文字列の変更 void SetTip( CHAR *pTip ); 引数 CHAR *pTip 変更するチップ文字列へのアドレス BOOL Add(); 戻値 TRUE(成功)、FALSE(失敗) BOOL Delete(); 戻値 TRUE(成功)、FALSE(失敗) // デストラクタ ~CTasktrayIcon(); */ #ifndef __TASKTRAY_ICON_H__ #define __TASKTRAY_ICON_H__ class CTasktrayIcon { NOTIFYICONDATA m_nIcon; // アイコンデータ public: // コンストラクタ CTasktrayIcon() { // アイコンデータのクリア ZeroMemory( (PVOID)&m_nIcon, sizeof(NOTIFYICONDATA) ); } // デストラクタ ~CTasktrayIcon() { // タスクトレイからアイコンを削除 Shell_NotifyIcon( NIM_DELETE, &m_nIcon ); } // 初期化 void Create( HWND hWnd, UINT uID, UINT uFlags, UINT uCallbackMessage, HICON hIcon, CHAR *pTip ) { // アイコンデータの初期化 m_nIcon.cbSize = sizeof( NOTIFYICONDATA ); m_nIcon.uID = uID; m_nIcon.hWnd = hWnd; m_nIcon.uFlags = uFlags; m_nIcon.uCallbackMessage = uCallbackMessage; m_nIcon.hIcon = hIcon; lstrcpy( m_nIcon.szTip, pTip ); } // チップ文字列の変更 void SetTip( CHAR *pTip ) { lstrcpy( m_nIcon.szTip, pTip ); } BOOL Add() { return( Shell_NotifyIcon( NIM_ADD, &m_nIcon ) ); } BOOL Delete() { return( Shell_NotifyIcon( NIM_DELETE, &m_nIcon ) ); } }; #endif