2

我正在使用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。

4

1 回答 1

3

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

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_CityComboBoxInfom_Cmb_City.GetComboBoxInfo(&m_CityComboBoxInfo);

于 2021-04-05T06:51:52.103 回答