タスクトレイに格納されたプログラムの作成。
久々にプログラム作ろうと思ってみて、せっかくなのでタスクトレイ格納型にしたいと思ったので、やり方を調べてみたメモ。
内容は、Shell_NotifyIcon()使えばイイだけ。これを使ってトレイ内のアイコンを変えてみたり~。
とりあえず、プログラム初期化部分に以下のコードを埋め込み完了。
nidNoftyIconData.cbSize = sizeof(NOTIFYICONDATA);
nidNoftyIconData.hWnd = hwnd;
nidNoftyIconData.uID = 1;
nidNoftyIconData.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
nidNoftyIconData.uCallbackMessage = WM_USER + 1;
nidNoftyIconData.hIcon = LoadIcon(hCurInst, MAKEINTRESOURCE(IDI_ICON));
strcpy(nidNoftyIconData.szTip, APP_DESCRIPTION);
Shell_NotifyIcon( NIM_ADD, &nidNoftyIconData );
あと、ウィンドウが無いので、プログラムを終了するために、ポップアップメニューを追加しないと。。。プログラムが終了できない。。。
ちなみにメニュー箇所は、こんな感じにしてみた。
case (WM_USER + 1): //アイコンからのメッセージ処理
if( lParam == WM_RBUTTONDOWN ){
// マウス右押し
GetCursorPos( &pt );
hMenuPop = CreatePopupMenu();
AppendMenu( hMenuPop, MF_BYCOMMAND | MF_STRING, IDR_EXIT, TEXT("Exit(&X)") );
SetForegroundWindow( hwnd );
TrackPopupMenu( hMenuPop, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwnd, NULL );
if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) {
TranslateMessage( &msg );
DispatchMessage( &msg );
}
DestroyMenu( hMenuPop );
}
とりあえず、ポップアップメニューまで追加したタスクトレイ格納型の雛形。
プログラムはVC++6.0で作成。
TaskTray.zip