微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CCombobox:如何在win32中下拉组合框样式时设置可编辑区域文本的文本颜色

如何解决CCombobox:如何在win32中下拉组合框样式时设置可编辑区域文本的文本颜色

我将 CComboBox 与 DropDown 样式一起使用,其中用户可以在编辑区域中输入数据,以防下拉选项中的预期选项不可用。 我正在尝试使用 OnCtlColor 设置可编辑区域中文本的颜色,但它将颜色设置为仅插入的下拉项目而不是可编辑区域。

HBrush CUserInfoDlg::OnCtlColor(CDC* pDC,CWnd* pWnd,UINT nCtlColor)
{
    int iCtrlID;

    HBrush hbr = CDialog::OnCtlColor(pDC,pWnd,nCtlColor);

    iCtrlID = pWnd->GetDlgCtrlID();

    if (CTLCOLOR_STATIC == nCtlColor &&
        (IDC_CMB_CITY == iCtrlID)
        )
    {
        pDC->SetTextColor(RGB(255,0));
        pDC->SetBkMode(TRANSPARENT);
        hbr = (HBrush) GetStockObject(WHITE_Brush);
    }

    if (CTLCOLOR_EDIT == nCtlColor &&
        (IDC_CMB_CITY == iCtrlID)
        )
    {
        pDC->SetTextColor(RGB(255,0));
        pDC->SetBkMode(TRANSPARENT);
    }
 return hbr;
}
 

其中 IDC_CMB_CITYCComboBox 控件的资源 ID。

解决方法

在评论的帮助下找到了答案:

HBRUSH CUserInfoDlg::OnCtlColor(CDC* pDC,CWnd* pWnd,UINT nCtlColor)
{
    TCHAR szText[MAX_PATH];
    HBRUSH hbr = CDialog::OnCtlColor(pDC,pWnd,nCtlColor);
    if (pWnd->m_hWnd == m_CityComboBoxInfo.hwndItem)
    {
        pDC->SetTextColor(RGB(255,0));
        pDC->SetBkMode(TRANSPARENT);
        hbr = (HBRUSH) GetStockObject(WHITE_BRUSH);

        int iSel = m_Cmb_City.GetCurSel();
        if (CB_ERR != iSel)
        {
            m_Cmb_City.GetLBText(iSel,szText);
            if (0 != _tcsicmp(szText,L"some_default_text_initially_shown_on_Dropdown"))
            {
                pDC->SetTextColor(RGB(0,0));
            }
        }
   }
}

哪里CComboBox m_Cmb_City;m_CityComboBoxInfo 是使用 m_Cmb_City.GetComboBoxInfo(&m_CityComboBoxInfo); 获取的 上面的一段代码将文本颜色设置为最初的红色。当用户从菜单中进行选择时,它会将文本颜色更改为黑色

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。