小弟头两天写的listctrl控件,需要在控件上添加鼠标悬停的扩展风格。但是添加之后,我发现如果鼠标在控件内移动时,悬停的行呈现的是深蓝色的背景,如果鼠标移出控件,则立即变为浅蓝色的背景。如何设置,将鼠标在控件内移动的时候,悬停的行呈现浅蓝色的背景,而选中的时候,选择的行立即变为深蓝色的背景,鼠标移出控件的时候,悬停所显示的行立即变成默认的颜色?全部可用分献上mfclistctrl鼠标悬停
调试欢乐多
{
当前热点索引=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;
}
}
}
大哥,WM_MOUSELEAVE和NM_CUSTOMDRAW这两个消息怎么创建啊?小弟不会,能不能给解释一下啊?小弟没有多余的可用分了,开不了帖子了。
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()
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);