小弟头两天写的listctrl控件,需要在控件上添加鼠标悬停的扩展风格。但是添加之后,我发现如果鼠标在控件内移动时,悬停的行呈现的是深蓝色的背景,如果鼠标移出控件,则立即变为浅蓝色的背景。如何设置,将鼠标在控件内移动的时候,悬停的行呈现浅蓝色的背景,而选中的时候,选择的行立即变为深蓝色的背景,鼠标移出控件的时候,悬停所显示的行立即变成默认的颜色?全部可用分献上mfclistctrl鼠标悬停

解决方案 »

  1.   

    CListCtrl::鼠标移动()//WM_MOUSEMOVE
    {
        当前热点索引=CListCtrl::HitTest();
    }
    CListCtrl::鼠标移出()//WM_MOUSELEAVE
    {
        当前热点索引=-1;
    }
    //自绘 NM_CUSTOMDRAW
    CListCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
    {
    LPNMLVCUSTOMDRAW pNMCD = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);
    *pResult = 0;
    if (pNMCD->nmcd.dwDrawStage==CDDS_PREPAINT){
    *pResult = CDRF_NOTIFYITEMDRAW;
    }else if (pNMCD->nmcd.dwDrawStage==CDDS_ITEMPREPAINT){
    *pResult = CDRF_NOTIFYSUBITEMDRAW;
    }else if (pNMCD->nmcd.dwDrawStage==CDDS_ITEMPREPAINT|CDDS_SUBITEM)
    {
    if(pNMCD->nmcd.dwItemSpec==当前热点索引){
                pNMCD->clrTextBk=热点项目背景颜色;
    *pResult = CDRF_NEWFONT;
    }else if(pNMCD->nmcd.uItemState&CDIS_SELECTED){
                pNMCD->clrTextBk=选中项目背景颜色;
    *pResult = CDRF_NEWFONT;
    }else{
    pNMCD->clrTextBk=普通项目背景颜色;
    *pResult = CDRF_NEWFONT;
    }
    }
    }
      

  2.   


    大哥,WM_MOUSELEAVE和NM_CUSTOMDRAW这两个消息怎么创建啊?小弟不会,能不能给解释一下啊?小弟没有多余的可用分了,开不了帖子了。
      

  3.   

    自绘了,重写CListCtrl,添加处理虚函数DrawItem()
      

  4.   

    //.h文件
    public:
    afx_msg void OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult);
    afx_msg LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam);
    //CPP文件
    BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
    ON_NOTIFY_REFLECT(NM_CUSTOMDRAW,OnNMCustomdraw)
    ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)
    END_MESSAGE_MAP()
      

  5.   

    设置列表控件(ListCtrl)各种颜色
    http://blog.csdn.net/cometnet/article/details/8477877

    //设置奇数行背景颜色
    void SetOddItemBkColor(COLORREF color,BOOL bDraw);
    //设置偶数行背景颜色
    void SetEvenItemBkColor(COLORREF color,BOOL bDraw);
    //设置热点行背景颜色
    void SetHoverItemBkColor(COLORREF color,BOOL bDraw);
    //设置选中行背景颜色
    void SetSelectItemBkColor(COLORREF color,BOOL bDraw);
    //设置奇数行文本颜色
    void SetOddItemTextColor(COLORREF color,BOOL bDraw);
    //设置偶数行文本颜色
    void SetEvenItemTextColor(COLORREF color,BOOL bDraw);
    //设置热点行文本颜色
    void SetHoverItemTextColor(COLORREF color,BOOL bDraw);
    //设置选中行文本颜色
    void SetSelectItemTextColor(COLORREF color,BOOL bDraw);