void CTrayIcon::OnTimer( UINT_PTR nIDEvent ) { if ( nIDEvent == _defFlashIconTimerID ) { if ( m_IsShowIcon ) { FlashIconData Data = DecideFlashIconData(); CIcon icon; icon.LoadIcon(Data.nIconNormal); ChangeIcon(icon); ChangeToolTip(Data.strTooltip); m_IsShowIcon = false; } else { FlashIconData Data = DecideFlashIconData(); CIcon icon; icon.LoadIcon(Data.nIconFlash); ChangeIcon(icon); ChangeToolTip(Data.strTooltip); m_IsShowIcon = true; } } else if ( nIDEvent == _defIconLeaveTimerID ) { POINT pt = {0}; RECT rc; GetCursorPos(&pt); if ( GetTrayIconRect(FindTrayWnd(), m_hNotifyWnd, &rc) == S_FALSE) { GetTrayIconRect(FindNotifyIconOverflowWindow(), m_hNotifyWnd, &rc); } if ( !PtInRect(&rc,pt) ) { BOOL b; OnTrayIconNotify(WM_TRAYICONNOTIFY, 0, WM_MOUSELEAVE, b); } } }
void CTrayIcon::OnTimer(UINT_PTR nIDEvent) { if (nIDEvent == m_dwTimerId) { RECT rect; GetTrayIconRect(&rect); POINT pt = {0}; ::GetCursorPos(&pt); if (!::PtInRect(&rect, pt)) { m_bHover = FALSE; ::PostMessage(m_stNotifyIconData.hWnd, m_stNotifyIconData.uCallbackMessage, m_stNotifyIconData.uID, WM_MOUSELEAVE); ::KillTimer(m_stNotifyIconData.hWnd, m_dwTimerId); m_dwTimerId = NULL; } } }