タスクトレイで起こったマウスイベントに対する処理を行う

前回の、「タスクトレイにアイコンを表示する」の続きです。
とりあえず、アイコンを表示するリストをもう一度見てみましょう。

 
 NOTIFYICONDATA nid;

 nid.cbSize=sizeof(NOTIFYICONDATA);

 nid.hWnd=hwnd;

 nid.uID=ID_TASK;//ID_TASKはこのアイコンに割り当てたID(自分で定義する)

 nid.uFlags =NIF_MESSAGE | NIF_TIP | NIF_ICON;//メッセージとツールチップとアイコンを有効にする

 nid.uCallbackMessage = MYWM_NOTIFYICON;//ウィンドウに送られるメッセージのID(自分で定義する)

 nid.hIcon=LoadIcon(hinst,MAKEINTRESOURCE(IDI_ICON1));

 strcpy(nid.szTip,"ここにメッセージを書くの");

 Shell_NotifyIcon(NIM_ADD,&nid);//NIM_ADDなのでアイコンをタスクトレイに加える

んーと。
ここで設定したnid.uCallbackMessage=MYWM_NOTIFYICON に注目してください
ここでは、タスクトレイ上においてマウスメッセージが発生したときに 送られるメッセージを指定しています。つまりタスクトレイ上で何かすると MYWM_NOTIFYICONというメッセージが送られるということです。
送られるメッセージのWPARAMとLPARAMに格納されている値は以下の通りです

WPARAM  対象のアイコンID(nid.uIDで指定したアイコンのID)
LPARAMマウスメッセージ(WM_MOUSEMOVEやWM_LBUTTONDOWNなど)

よって、左クリックされたら(WM_LBUTTONDOWN)何か動作をするプログラムはこんな感じになります。

case MYWM_NOTIFYICON:
    if(lParam==WM_LBUTTONDOWN)
     {
       何か処理を行う
     }
break;

WM_LBUTTONDOWNに関しては、自分のプログラムで作ったアイコン上でないとメッセージが 送られないようなので、一つだけならアイコンのIDは指定しなくてもいいようです。

戻る