【发布时间】:2019-07-10 21:38:22
【问题描述】:
我正在尝试为派生的 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,我应该试试吗?
谢谢:)
【问题讨论】:
-
OnCtlColor()不适用于绘图。您只能修改设备上下文状态,例如。 G。CDC::SetBkColor,CDC::SetTextColor并返回一个画笔。