C++ MFC CListCtrl 表格让特定行灰显

背景

在某些场景需要表格,灰显一些特定的行,同时用户还不能修改该行的状态。

一、 **.h 对话框头文件添加回调消息函数原型声明

// 自定义某行灰显
afx_msg void OnCustomDrawListCtrl(NMHDR* pNMHDR, LRESULT* pResult);

二、**.cpp实现

void CYourDialog::OnCustomDrawListCtrl(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)
    {
    
    
        int row = pLVCD->nmcd.dwItemSpec; // 获取当前绘制的行索引

        // 如果是需要灰显的行,则设置文本颜色为灰色
        if (row == YOUR_GRAYED_ROW_INDEX)  // 注意YOUR_GRAYED_ROW_INDEX需替换为自己需要灰显的行号
        {
    
    
            pLVCD->clrText = RGB(128, 128, 128); // 设置文本颜色为灰色
            *pResult = CDRF_NEWFONT; // 如果需要修改字体,添加该标志位
        }
    }
}

三、消息映射表添加消息映射

// 在消息映射表中添加对应的消息映射
BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
    ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST_CTRL, OnCustomDrawListCtrl)
END_MESSAGE_MAP()

总结:

通过以上方式,将自定义绘制回调函数声明为 afx_msg 修饰的消息处理函数,并添加到消息映射表中,可以实现对指定控件的自定义绘制。

请注意,在 MFC 中,消息处理函数需要遵循特定的参数和返回值类型,以确保正确地与消息机制配合。因此,在声明自定义绘制回调函数时,需要确保参数类型与 NMHDR* 一致,并且返回类型为 void。

猜你喜欢

转载自blog.csdn.net/qq_44859843/article/details/131112622