スポンサーリンク

タスクトレイにアイコンを表示する

タスクトレイにアイコンを表示する方法

① アイコンの表示を開始したいタイミングで、Shell_NotifyIcon関数をNIM_ADDで呼び出す

② メッセージループに「タスクトレイのアイコンにアクションがあった」という単位でメッセージが届くので、処理する

③ アイコンを消したいタイミングで、Shell_NotifyIcon関数をNIM_DELETEで呼び出す

 

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {

  static const decltype(WM_USER) WM_NOTIFYICON = WM_USER + 100;
  static const int IconID = 100;

  switch (msg) {
  case WM_LBUTTONDOWN://ウィンドウをクリックしたらアイコン表示開始
  {
    NOTIFYICONDATA nid;
    nid.cbSize = sizeof(nid);
    nid.hWnd = hwnd;
    nid.uID = IconID;//複数のアイコンを表示したときの識別ID。なんでもいい。
    nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    nid.uCallbackMessage = WM_NOTIFYICON; //WM_USER以降の定数。
    nid.hIcon = (HICON)LoadIcon(NULL, IDI_APPLICATION);
    _tcscpy(nid.szTip, _T("タスクトレイで表示する文字列"));
    int ret = (int)Shell_NotifyIcon(NIM_ADD, &nid);
    ShowWindow(hwnd, SW_HIDE);
  }
    break;
  case WM_NOTIFYICON:
    if (wp == IconID && lp == WM_LBUTTONDOWN) {
      //アイコンに対する操作がWM_LBUTTONDOWNでアイコンのIDがIconIDなら以下の処理:
      ShowWindow(hwnd, SW_SHOW);

      //タスクトレイアイコンを削除
      ////////////////////////////////////////
      NOTIFYICONDATA nid;
      nid.cbSize = sizeof(nid);
      nid.hWnd = hwnd;
      nid.uID = IconID;
      nid.uFlags = 0;
      Shell_NotifyIcon(NIM_DELETE, &nid);
      ////////////////////////////////////////

    }

    break;
  case WM_DESTROY:
    DestroyWindow(hwnd);
    PostQuitMessage(0);
    return 0;
  }
  return DefWindowProc(hwnd, msg, wp, lp);
}

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: