我用CBitmapButton实现了一列按钮。
使用AutoLoad方式载入四种图(Up Down Focus Disable),目前在按下、弹起、焦点、Disable都有不同的图。
但是没有办法加上鼠标经过时的图。(原来以为是Focus,但是不是)请问如何实现?

解决方案 »

  1.   

    好象应该继承这个按钮,在子类中响应WM_MOUSEMOVE事件,然后自绘一个位图,以前用过一个CButtonST的类,有这个功能,很好找的你找找看.
      

  2.   

    see also:
    http://expert.csdn.net/Expert/topic/1810/1810003.xml?temp=.3828546
      

  3.   

    就是Mouse In 和Mouse Out两种状态图嘛,去CodeProject 的Button类里找找,多的是这种例子...
      

  4.   

    方法1:派生新类,在你的类的DrawItem中通过GetStyle()得到当前是否是ODS_SELECTED,再决定你用那张图。
    方法2: 不用派生新类,得到按钮的矩型m_rect,跟踪MouseMove事件,一旦发现m_rect.PtInRect(鼠标坐标)就使用某张图,否则就是用另外一张图,这种方法比较耗费资源。当然,你可以再记录前一次按钮的状态(鼠标是否在上面),只有状态发生改变时,才真正的更换图片。
      

  5.   

    可是我继承CBitmapButton后,贴图就不见了(我用的AutoLoad)
      

  6.   

    太多了http://www.vckbase.com/code/listcode.asp?mclsid=3&sclsid=301
      

  7.   

    BOOL m_bTracking = FALSE;
    void CMyButton::OnMouseMove(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    if (!m_bTracking)
    {
    TRACKMOUSEEVENT tme;
    tme.cbSize = sizeof(tme);
    tme.hwndTrack = m_hWnd;
    tme.dwFlags = TME_LEAVE | TME_HOVER;
    tme.dwHoverTime = 1;
    m_bTracking = _TrackMouseEvent(&tme);
    }

    CButton::OnMouseMove(nFlags, point);
    }
    LRESULT CMyButton::OnMouseLeave(WPARAM wParam, LPARAM lParam)
    {
    m_bTracking = FALSE;
    InvalidateRect(NULL, FALSE);
    return 0;
    }LRESULT CMyButton::OnMouseHover(WPARAM wParam, LPARAM lParam)
    {
    InvalidateRect(NULL);
    return 0;
    }
      

  8.   

    OnMouseMove不好,我用OnTimer实现了,谢谢大家,给分了。