前回の、「タスクトレイにアイコンを表示する」の続きです。
とりあえず、アイコンを表示するリストをもう一度見てみましょう。
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は指定しなくてもいいようです。