首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在CComboBox上绘制setFocus

如何在CComboBox上绘制setFocus
EN

Stack Overflow用户
提问于 2021-12-23 13:56:55
回答 1查看 59关注 0票数 1
代码语言:javascript
复制
HBRUSH CDialog23::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

    int Element = pWnd->GetFocus()->GetDlgCtrlID();

    if (pWnd->GetDlgCtrlID() == Element && nCtlColor != CTLCOLOR_STATIC)
    {
        pDC->SetBkMode(TRANSPARENT);
        pDC->SetBkColor(RGB(255, 230, 153));
        hbr = m_Gelb;
        return hbr;
    }
    else
    {
        pDC->SetBkMode(TRANSPARENT);
        pDC->SetBkColor(RGB(255, 255, 255));
        hbr = m_Weiss;
        return hbr;
    }
}

有了这段代码,当我将焦点设置在其中一个时,我的ComboBoxes就会变成黄色。但是,如果将当前焦点设置为ComboBoxes之一,则当我使用光标(没有单击光标)在其上方悬停时,所有其他ComboBoxes都会变成黄色。而且,ComboBox的列表不会被着色(它们被格式化为下拉列表)。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2022-01-03 21:17:49

这是因为您没有检查组合框ID等于聚焦组合框ID。下拉组合框永远不会收到焦点。包含子编辑控件的是复杂控件,该控件具有ID=1001 (0x03E9)。因此,您将注意力集中在带有1001 ID的窗口上,并且通过该ID的所有窗口也会更改背景。更改逻辑,使用windows句柄而不是ID。至于下拉列表,是一个分层在组合框窗口上的弹出窗口,您必须使用不同的方法更改背景。您无法控制删除列表的创建,唯一的方法是使用钩子对此窗口进行动态子类。

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

https://stackoverflow.com/questions/70463123

复制
相关文章

相似问题

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