我正在尝试为派生的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
编码,有人知道吗?我已经看到有人将
CEdit
和CListCtrl
分为子类,我应该尝试这样做吗?谢谢 :)
最佳答案
我在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/