我正在MFC Windows应用程序中工作。我正在使用Check List Box控件(CCheckListBox类)中的复选框。禁用复选框时,其颜色保持灰色。有什么方法可以将背景颜色从灰色更改为另一种颜色?

最佳答案

您可以使用DrawItem方法来控制控件及其列表项的呈现。为此,您需要派生自己的CCheckListBox类并实现该方法。例如,我将列表中的第二项更改为红色。

c++ - 在MFC中更改禁用复选框的背景颜色-LMLPHP

做到这一点的示例代码如下:

void MyCheckListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
    UINT index = lpDrawItemStruct->itemID;
    CDC *pDC = CDC::FromHandle (lpDrawItemStruct->hDC);
    if (index == 1)
    {
        CRect rect = lpDrawItemStruct->rcItem;
        pDC->FillSolidRect(&rect, RGB(255, 0, 0));
    }
    CString str;
    GetText(index, str);
    pDC->DrawText(str, &lpDrawItemStruct->rcItem, DT_LEFT | DT_VCENTER);
}

以上示例更改了项目的背景色。我已将剩下的所有处理工作和所有多余的渲染工作留给了您。

10-04 18:34