我正在尝试为派生的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分为子类,我应该尝试这样做吗?

谢谢 :)

最佳答案

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

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

关于c++ - ComboBox-OnCtlColor:如何为整个列表着色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56954898/

10-12 06:06