void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
DrawItem 方法会在组合框的每一项需要被绘制时被调用。您需要在派生的类中重写此方法,并实现自定义的绘制逻辑。以下是一个简单的示例:
class CMyComboBox : public CComboBox
{
public:
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
};
void CMyComboBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
// 检查是否是有效的项
if (lpDrawItemStruct->itemID != -1)
{
// 获取要绘制的文本
CString strText;
GetLBText(lpDrawItemStruct->itemID, strText);
// 设置文本颜色和背景颜色
dc.SetTextColor(RGB(0, 0, 0)); // 黑色文本
dc.SetBkColor(RGB(255, 255, 255)); // 白色背景
// 绘制文本
dc.DrawText(strText, &lpDrawItemStruct->rcItem, DT_LEFT | DT_VCENTER | DT_SINGLELINE);
}
dc.Detach();
}
在上述示例中,CMyComboBox 是一个自定义的 CComboBox 派生类,其中重写了 DrawItem 方法。在此方法中,您可以获取要绘制的文本、设置文本颜色和背景颜色,并使用 DrawText 方法绘制文本。您可以根据实际需求更改绘制逻辑。
请注意,在使用 OwnerDraw 样式时,还需要确保在创建组合框时设置了 CBS_OWNERDRAWFIXED 或 CBS_OWNERDRAWVARIABLE 样式,以通知组合框您将自己负责绘制。
转载请注明出处:http://www.zyzy.cn/article/detail/15974/MFC/CComboBox