gpt4 book ai didi

c++ - MFC CListView 自定义绘图 - 如果文本等于值,则颜色行

转载 作者:搜寻专家 更新时间:2023-10-31 01:42:11 26 4
gpt4 key购买 nike

在我的 C++ MFC 应用程序中,我使用报表样式的 CListView。如果某个值等于特定值,我需要一种在行中着色的方法,即我有一个“有效性”列,如果值超出范围,则将该行着色为红色。

我知道我需要使用 CustomDraw 处理程序,因为自定义绘图意味着我可以更改绘图上下文。

最佳答案

要添加自定义绘制处理程序,请单击您的列表控件,转到“属性”并单击“事件”。添加“NM_CUSTOMDRAW”控件事件处理程序。

如果第三列的行等于“否”,则此自定义绘制事件处理程序在每一行中着色:

void Test_ClientDlg::OnNMCustomdrawlistctrlvalues(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLVCUSTOMDRAW lpLVCustomDraw = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);
int itemCnt = 0;
CString text;
RECT rc;

switch(lpLVCustomDraw->nmcd.dwDrawStage)
{
case CDDS_ITEMPREPAINT:
case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
itemCnt = listAnalysisVals->GetItemCount();
for (int i = 0; i < itemCnt; i++)
{
//get each row text for 3rd column (position 2)
text = listAnalysisVals->GetItemText(i, 2);
if (text.Compare("No") == 0)
{
if (i == (lpLVCustomDraw->nmcd.dwItemSpec))
{
lpLVCustomDraw->clrTextBk = RGB(255,50,50);
listAnalysisVals->GetItemRect(i,&rc,LVIR_BOUNDS);
listAnalysisVals->InvalidateRect(&rc, 0);
}
}
}
break;
default: break;
}

*pResult = 0;
*pResult |= CDRF_NOTIFYPOSTPAINT;
*pResult |= CDRF_NOTIFYITEMDRAW;
*pResult |= CDRF_NOTIFYSUBITEMDRAW;
}

这导致:

enter image description here

关于c++ - MFC CListView 自定义绘图 - 如果文本等于值,则颜色行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27352816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com