タスクトレイにアイコンを追加する
Shell_NotifyIconを使ってタスクトレイにアイコンを登録する方法を紹介しています。
サンプルコード
// メッセージIDの定義
#define WM_NOTIFYICON (WM_USER + 100)
.
.
.
// NOTIFYICONDATA型変数の宣言
NOTIFYICONDATA nIcon;
.
.
.
// アイコンの追加
nIcon.cbSize = sizeof(NOTIFYICONDATA);
nIcon.uID = 1;
nIcon.hWnd = hwnd;
nIcon.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
nIcon.hIcon = hicon;
nIcon.uCallbackMessage = WM_NOTIFYICON;
lstrcpy(nIcon.szTip,"アイコンのヒント");
Shell_NotifyIcon(NIM_ADD, &nIcon);
.
.
.
// アイコンの削除
Shell_NotifyIcon(NIM_DELETE, &nIcon);
// メッセージの処理
switch(msg){
.
.
.
case WM_NOTIFYICON:
switch(lparam){
case WM_RBUTTONDOWN:
.
.
.
break;
case WM_LBUTTONDBLCLK:
.
.
.
break;
}
break;
.
.
.
}
概要
まずはヘッダファイルでタスクトレイアイコンがクリックされたときなどに発生するメッセージIDの定義を行います。ID値は自由に指定できますがシステムで使われているIDとぶつからないように
WM_USER
より大きな値を指定するのが一般的です。 次にアイコンの登録/識別などに利用する構造体を宣言しておきます。classを使うときはメンバ変数としてそれ以外の場合はグローバル変数として確保するのがいいでしょう。
いよいよ、アイコンの追加です。上から構造体のサイズ、識別番号、クリックメッセージなどが送信されるウインドウハンドル、アイコンの属性フラグ、アイコンのハンドル、利用するメッセージのID、マウスカーソルでアイコンをポイントしたときに表示されるヒント文字を指定し、
Shell_NotifyIcon
で登録を行います。
次はプログラム終了時などトレイからアイコンを削除する処理です。
最後に
WinProc
関数内のメッセージの処理です。
wparam
に登録時に指定した識別番号、lpa
wparam
ramにイベントの種類が入っています。