ON_NOTIFY()的问题(请高手进)

luokuangcun 2011-08-03 08:02:26
(1)在头文件中定义:afx_msg void OnDrawColorForMyList( NMHDR *pNmHdr, LRESULT *pResult);
该函数用来实现当用户选中ListControl的某一行后,使其变为红色;
(2)在对应的CPP文件中完成OnDrawColorForMyList()与空间的绑定,现在有3个ListControl要使用到这个函数:
ON_NOTIFY( NM_CUSTOMDRAW, IDC_LIST_LOG, OnDrawColorForMyList)
ON_NOTIFY( NM_CUSTOMDRAW, IDC_LIST_USER_SET, OnDrawColorForMyList)
ON_NOTIFY( NM_CUSTOMDRAW, IDC_LIST_ACT, OnDrawColorForMyList)
(3)下面是OnDrawColorForMyList()的定义:
//改变IDC_LIST_ACT选中行的颜色
void CSysMaintDlg::OnDrawColorForMyList( NMHDR *pNmHdr, LRESULT *pResult )
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNmHdr );

*pResult = CDRF_DODEFAULT;

if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage )
{
COLORREF clrNewTextColor, clrNewBkColor;

int nItem = static_cast<int>( pLVCD->nmcd.dwItemSpec );

//选中行显示字体为红色,否则为黑色
if(m_list_act.m_nCurRow== nItem) //设置为红色
{
clrNewTextColor = RGB( 255, 0, 0 );
}
else //设置为黑色
{
clrNewTextColor = RGB( 0, 0, 0 );
}

//设置背景色
if( nItem%2 ==0 )
{
clrNewBkColor = RGB( 240, 240, 240 ); //偶数行背景色为灰色
}
else
{
clrNewBkColor = RGB( 255, 255, 255 ); //奇数行背景色为白色
}



pLVCD->clrText = clrNewTextColor;
pLVCD->clrTextBk = clrNewBkColor;

*pResult = CDRF_DODEFAULT;
}
}


在这个函数中需要使用到ListControl的对象来获取当前选中的行,应该如何改写这个方法,可以使三个ListControl都使用这个函数呢?我不知道参数应该如何设置。

标注红色的地方是要用到的ListControl对象,应该怎样向这个函数传参数才能使这三个ListControl控件都能使用这个函数呢?

我问过一些高手,有的说自己定义一个类CMyListCtrl继承CListCtrl,在这个类里面添加 OnDrawColorForMyList()函数,然后给CListCtrl控件绑定一个CMyListCtrl对象,这样这个对象就可以使用这个函数实现自定义绘制。
但现在问题又来了:怎样绑定到ON_NOTIFY()呢,如果这样绑定:
CMyListCtrl m_list;
ON_NOTIFY( NM_CUSTOMDRAW, IDC_LIST_LOG, m_list.OnDrawColorForMyList)
肯定是不行的,那有没有什么办法解决这个问题呢?
...全文
143 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
luokuangcun 2011-08-04
  • 打赏
  • 举报
回复
你的方法不错,但是无法绑定到ON_NOTIFY()中,有什么更好的方法吗?
Eleven 2011-08-03
  • 打赏
  • 举报
回复
重写CListCtrl类,添加处理虚函数DrawItem即可
http://blog.csdn.net/visualeleven/article/details/5948057

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧