ComboBox-OnCtlColor:如何为整个列表着色

时间:2019-07-09 14:31:24

标签: c++ mfc

我正在尝试为派生的ComboBox类列表的rect上色。在OnCtlColor中,我使用FillSolidRect绘制矩形,但是当我将鼠标放在列表上时,它将丢失所有文本(仅保留一个选中的文本)。这是我的代码:

HBRUSH CColoredComboBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CComboBox::OnCtlColor(pDC, pWnd, nCtlColor);

    if (nCtlColor == CTLCOLOR_LISTBOX || nCtlColor == CTLCOLOR_EDIT || nCtlColor == CTLCOLOR_MSGBOX)
    {
        CRect rect;
        pDC->GetClipBox(&rect);
        // fill the rectangular area with the color
        pDC->FillSolidRect(&rect, RGB(255, 0, 255));
        hbr = m_brBkgnd;
        pDC->SetTextColor(RGB(0, 255, 0));
        pDC->SetBkColor(RGB(255, 0, 255));
    }

    return hbr;
}

我想我需要DrawText回信,有人知道吗?

我已经看到有些人将CEditCListCtrl分为子类,我应该尝试吗?

Thx:)

1 个答案:

答案 0 :(得分:0)

我在SetBkColor

之后将其添加到OnCtlColor函数中
        int numItems = GetCount();
        char text[1024];
        int height = GetItemHeight(0);

        for (int i = 0; i < numItems; i++) 
        {
            GetLBText(i, text);
            CRect pos(rect.left + 2, rect.top + (height * i), rect.right, rect.bottom);
            DrawText(pDC->GetSafeHdc(), text, -1, &pos, DT_SINGLELINE);
        }

这就是我解决问题的方式! :)