本帖最后由 kelvinty 于 2010-01-26 09:06:57 编辑

解决方案 »

  1.   

    OnMouseHover事件中,实现切换过程,判断是否在按钮上面区域,如果在则切换为一种状态,不在切换为另一种状态
      

  2.   

        不好意思,你说的这个道理我懂,关键就是怎么切换???     我知道有这么个结构体,绘制的时候是根据 DRAWITEMSTRUCT 里面的 itemState 来绘制的,我现在就是不知道怎么改这个值,获得焦点时的值为 10 。
      

  3.   

    DrawItem里面的itemState无法判断,
    你需要处理MouseMove消息,然后_TrackMouseEvent,这样就可以监视MouseHover在OnMouseHover中处理切换。
      

  4.   

    你需要重载这个BUTTON按钮,然后通过响应WM_MOUSEMOVE和WM_MOUSELEAVE消息判断鼠标是否在按钮上,最后重载虚函数virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);进行重绘
    void CXXButton::OnMouseMove(UINT nFlags, CPoint point) 
    {
        if(!m_bHover)
        {
    m_bHover = TRUE; // 是否滑过
    TRACKMOUSEEVENT tm;
    tm.cbSize  = sizeof(TRACKMOUSEEVENT);
    tm.hwndTrack = m_hWnd;
    tm.dwFlags = TME_LEAVE;
    _TrackMouseEvent(&tm);
    Invalidate();
        }
        CButton::OnMouseMove(nFlags, point);
    }LRESULT CXXButton::OnMouseLeave(WPARAM wParam, LPARAM lParam)
    {
        if(m_bHover)
        {
    m_bHover = FALSE; // 是否滑过
    Invalidate();
        }
        return CButton::DefWindowProc(WM_MOUSELEAVE, wParam, lParam);
    }