Iwao Dev

気付いたことをメモしています.

この画面は、簡易表示です

2015年9月1日

NotifyIcon クラスの使用

NotifyI.hxx


ダイアログまたは相当のクラスのヘッダに,NotifyIcon の変数を確保.
タスクトレイにアイコンを表示したい時は,NotifyIcon::Add または Mod を呼出す.
タスクトレイのアイコンを消したい時は,NotifyIcon::Del .


アニメーションの場合,NotifyIcon::StartAnimate とタイマで NotifyIcon::AnimateIcon .
アニメーションアイコンの登録は,NotifyIcon::AddIconA .登録されてない場合は,exe のアイコンと表示なしのトグル.
CAppDlg::OnInitDailog で StartAnimate ,CAppDlg::OnTimer で AnimateIcon だけで,exe アイコンが点滅する.


チップの設定は,NotifyIcon::SetTip .


最小化されたときに表示
  void CXxxxDlg::OnSize(UINT nType, int cx, int cy)
  {
    CDialog::OnSize(nType, cx, cy);
    ::FitWindow(this,&m_Image,0) ;
    if (nType == SIZE_MINIMIZED) {
      ShowWindow(SW_HIDE) ;
      NotifyI.Mod() ;
      }
    }


ヘッダとソースへの MESSAGE MAP の追加
  afx_msg LRESULT OnTrayCallback (WPARAM wParam,LPARAM lParam);
  ON_MESSAGE (WM_TRAY_CALLBACK, OnTrayCallback)
マウスのクリックによる動作
  LRESULT CXxxxDlg::OnTrayCallback (WPARAM wParam,LPARAM lParam)
  {
    UINT uID = (UINT)wParam;
    UINT uMouseMsg = (UINT)lParam;
    if (uMouseMsg == WM_LBUTTONDOWN) {
      AfxGetMainWnd()->ShowWindow(SW_SHOW) ;
      AfxGetMainWnd()->ShowWindow(SW_SHOWNORMAL) ;
      }
    if (uMouseMsg == WM_RBUTTONUP) {
      CPoint curPos ; ::GetCursorPos(&curPos) ;
      PopupMenu (NULL,IDR_POP_MENU,curPos,ID_XXXX) ;
      }
    return 0 ;
    }
WM_TRAY_CALLBACK は,NotifyI.hxx に定義済.


2015/09/03
メニュー表示後,デスクトップなどのクリックでメニューが消えなかったので検索すると,
SetForegroundWindow呼べば良いとのこと
    if (uMouseMsg == WM_RBUTTONUP) {
      CPoint curPos ; ::GetCursorPos(&curPos) ;
      SetForegroundWindow() ;
      PopupMenu (NULL,IDR_POP_MENU,curPos,ID_XXXX) ;
      }

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ



    top

    %d人のブロガーが「いいね」をつけました。