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

CCombobox : how to set text color of Editable area text when combobox style is dropdown in 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, 0));
        pDC->SetBkMode(TRANSPARENT);
        hbr = (HBRUSH) GetStockObject(WHITE_BRUSH);
    }

    if (CTLCOLOR_EDIT == nCtlColor &&
        (IDC_CMB_CITY == iCtrlID)
        )
    {
        pDC->SetTextColor(RGB(255, 0, 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, 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, 0));
            }
        }
   }
}

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