更改MFC中diasabled复选框的背景颜色

时间:2016-04-20 11:48:14

标签: c++ visual-c++ mfc

我正在使用MFC Windows应用程序。我在Check List Box控件(CCheckListBox类)中使用复选框。禁用复选框时,其颜色仍为灰色。有没有办法将背景颜色从灰色更改为另一种颜色?

2 个答案:

答案 0 :(得分:2)

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

enter image description here

这样做的示例代码看起来像......

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);
}

以上示例更改项目的背景颜色。我已经完成剩余的处理和任何额外的渲染了。

答案 1 :(得分:0)

@rrirower的实现将起作用,但他的代码需要一些修改。

(1)更改已禁用复选框的背景颜色

void CMyCheckListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
  CDC dc;
  dc.Attach(lpDrawItemStruct ->hDC);
  RECT rect = lpDrawItemStruct ->rcItem;
  UINT nId=lpDrawItemStruct->itemID;
  CString strItemText;
  GetText(lpDrawItemStruct ->itemID, strItemText);
  if(nId==1 ||nId==3){
    dc.FillSolidRect(&rect,RGB(255,0,0));
    dc.DrawText(strItemText , &rect, DT_LEFT | DT_VCENTER);
  }
  else{
    CCheckListBox::DrawItem(lpDrawItemStruct); 
  } 
  dc.Detach();
}    

enter image description here

(2)更改已禁用的检查列表框文本颜色
dc.FillSolidRect(&rect,RGB(255,0,0));替换为dc.SetTextColor(RGB(255,0,0));

enter image description here