关键的地方
//=============================================================================
LRESULT CGdipButton::OnMouseHover(WPARAM wparam, LPARAM lparam)
//=============================================================================
{
printf("CGdipButton::OnMouseHover\n");
m_bIsHovering = TRUE;
this->DeleteToolTip();
// Create a new Tooltip with new Button Size and Location
this->SetToolTipText(m_tooltext);
if (m_pToolTip != NULL)
{
if (::IsWindow(m_pToolTip->m_hWnd))
{
//Display ToolTip
m_pToolTip->Update();
}
}
//---- 增加这个,触发多次犹豫
m_bIsTracking = FALSE;
return 0;
}
//=============================================================================
LRESULT CGdipButton::OnMouseLeave(WPARAM wparam, LPARAM lparam)
//=============================================================================
{
m_bIsTracking = FALSE;
m_bIsHovering = FALSE;
this->Invalidate();
return 0;
}
//=============================================================================
void CGdipButton::OnMouseMove(UINT nFlags, CPoint point)
//=============================================================================
{
//---- 这里需要这么写
if (FALSE == m_bIsTracking)
{
TRACKMOUSEEVENT tme = {0};
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE|TME_HOVER;
tme.dwHoverTime = 300; //---- 300毫秒的犹豫时间
m_bIsTracking = _TrackMouseEvent(&tme);
this->Invalidate();
}
CButton::OnMouseMove(nFlags, point);
}