MFC List control 设置某行某列字体颜色及背景

本文介绍了如何在MFC的List Control中设置特定行特定列的字体颜色和背景色。通过响应事件,添加代码段,并调用SetSelectionMark方法实现指定行的高亮显示。
摘要由CSDN通过智能技术生成
OnNMCustomdrawCheckmessage(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 );
 
        int nRow,nCol;//行 , 列
		
		nCol=pLVCD->iSubItem;
		int index = m_list.GetSelectionMark();
		if(index == nItem && nCol == 0)//nCol 指定列,根据需要选择列
		{
			clrNewTextColor = RGB(255,0,0);
			clrNewBkColor = RGB(255,255,255);
		}
		else
		{
			clrNewTextColor = RGB(0,0,0);
		
MFC(Microsoft Foundation Classes)中,要改变`CListCtrl`控件中某一行某一背景色和字体颜色,可以使用`SetItem`方法。以下是一个简单的步骤说明: 1. 使用`GetItem`函数获取你想要改变颜色的`LVITEM`结构体。 2. 修改`LVITEM`结构体中的`stateMask`成员以指定需要改变的属性,如`LVIS_SELECTED`、`LVIS_FOCUSED`等。 3. 设置`ps`(`LVITEM`结构体中的`ps`成员)的`clrText`和`clrBack`属性,分别对应字体颜色背景颜色。 4. 最后,调用`SetItem`函数应用这些改变。 下面是一个示例代码,展示了如何改变特定行和颜色: ```cpp void ChangeListItemColors(CListCtrl& listCtrl, int itemIndex, int subItemIndex, COLORREF textColor, COLORREF backColor) { LVITEM lvi; ZeroMemory(&lvi, sizeof(lvi)); lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE; // 你可以根据需要改变mask lvi.iItem = itemIndex; // 行索引 lvi.iSubItem = subItemIndex; // 索引 lvi.pszText = NULL; // 不改变文本 lvi.cchTextMax = 0; lvi.stateMask = LVIS_SELECTED; // 你可能需要改变这一行以设置正确的状态 lvi.state = 0; // 清除所有状态,可以根据需要设置状态 // 设置颜色 LVITEM Clarkson; Clarkson = lvi; // 复制lvi结构 Clarkson.state = LVIS_SELECTED; Clarkson.psy = textColor; // 设置字体颜色 Clarkson.state |= LVIS_SELECTED; Clarkson.psy = backColor; // 设置背景颜色 listCtrl.SetItem(&Clarkson); // 应用改变 // 如果你想要改变行的背景颜色,可以这样做: listCtrl.SetItemState(itemIndex, INDEXTOSTATEIMAGEMASK(LVIS_SELECTED), LVIS_SELECTED); } ``` 在使用这个函数时,你需要传入`CListCtrl`对象的引用、行索引、索引以及你想要设置字体颜色背景颜色。 请注意,这个例子主要是说明如何使用`SetItem`方法来改变颜色,你可能需要根据你的具体需求调整代码,比如选择正确的状态标志,或者处理其他特定的属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值