/* タスクトレイへのアイコン追加 2003/ 2/ 7 宍戸 輝光 */ #include LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance, PSTR szCmdLine,int iCmdShow){ HWND hwMain; MSG msg; WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = "CWindow"; RegisterClass(&wndclass); hwMain=CreateWindow("CWindow","タスクトレイへのアイコン追加", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT, 560,480,NULL,NULL,hInstance,NULL); ShowWindow(hwMain,iCmdShow); /* ウインドウを表示 */ UpdateWindow (hwMain); /* 再描画 */ while(GetMessage(&msg,NULL,0,0)) { /* メッセージループ */ TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam ; } LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam) { static HICON hIcon; static NOTIFYICONDATA icdata; switch (iMsg) { case WM_CREATE: /* ウインドウ生成時 */ /* タスクトレイに追加するアイコンのハンドルを取得 */ hIcon=LoadIcon(NULL,IDI_APPLICATION); /* NOTIFYICONDATA設定 */ icdata.cbSize=sizeof(NOTIFYICONDATA); icdata.hWnd=hwnd; icdata.uID=0; icdata.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP; icdata.uCallbackMessage=WM_USER; icdata.hIcon=hIcon; CopyMemory(icdata.szTip,"Test",5); /* タスクトレイにアイコン追加 */ Shell_NotifyIcon(NIM_ADD,&icdata); return 0; case WM_USER: /* タスクトレイのアイコンメッセージ */ switch(lParam) { case WM_LBUTTONDOWN: /* 左ボタンクリック */ MessageBox(hwnd,"左クリック","アイコンメッセージ",MB_OK); break; } return 0; case WM_DESTROY: /* ウインドウ破棄時 */ /* タスクトレイからアイコン削除 */ Shell_NotifyIcon(NIM_DELETE,&icdata); PostQuitMessage(0); return 0; } return DefWindowProc(hwnd,iMsg,wParam,lParam); }