首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ComboBox - OnCtlColor :如何给整个列表矩形上色

ComboBox - OnCtlColor :如何给整个列表矩形上色
EN

Stack Overflow用户
提问于 2019-07-09 22:31:24
回答 1查看 164关注 0票数 1

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

代码语言:javascript
运行
复制
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 :)

EN

回答 1

Stack Overflow用户

发布于 2019-07-10 02:24:45

我在SetBkColor之后的OnCtlColor函数中添加了以下内容

代码语言:javascript
运行
复制
        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);
        }

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56954898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档