NotifyIcon クラスの使用
ダイアログまたは相当のクラスのヘッダに,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) ;
}