wxpython列表控件listctrl设置某行颜色_找了一天,改变CListCtrl控件指定行颜色的方法终于找到...

本文介绍了如何在wxPython中使用CListCtrl控件,并通过添加ON_NOTIFY消息和自定义绘制函数,实现在列表控件中动态改变指定行的颜色。通过判断条件设置不同颜色,如修改过的行显示为红色,未修改的行显示为黑色,同时偶数行背景色为灰色,奇数行为白色。
摘要由CSDN通过智能技术生成

昨天晚上就把SSDT查看/恢复工具编写完毕,但美中不足的是,对于修改过的SSDT项在用CListCtrl列出来后,无法修改指定这行的颜色!郁闷中,今天下午起来又继续找方法,最后终于找到了,我的工具也可以说是圆满结束了!

首先是添加以下消息

ON_NOTIFY( NM_CUSTOMDRAW, IDC_LIST1, OnDrawColorForMyList )  //为改变颜色添加的消息

再添加类成员函数,就OK了:

//改变 m_List 控件单行的颜色

void CSSDTDlg::OnDrawColorForMyList( NMHDR *pNmHdr, LRESULT *pResult )

{

NMLVCUSTOMDRAW* pLVCD = reinterpret_cast( 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( pLVCD->nmcd.dwItemSpec );

//如果当前SSDT地址与原始地址不一样,则显示字体为红色,否则为黑色

if( \

((pSSDTSaveTable)((ULONG)pSSDTST + nItem * sizeof(SSDTSaveTable)))->ulCurrentFunctionAddress \

!= ((pSSDTSaveTable)((ULONG)pSSDTST + nItem * sizeof(SSDTSaveTable)))->ulOriginalFunctionAddress \

)  //设置为红色

{

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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值