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_CITY
是 CComboBox
控件的资源 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);
获取的
上面的一段代码将文本颜色设置为最初的红色。当用户从菜单中进行选择时,它会将文本颜色更改为黑色
我正在使用 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_CITY
是 CComboBox
控件的资源 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);
获取的
上面的一段代码将文本颜色设置为最初的红色。当用户从菜单中进行选择时,它会将文本颜色更改为黑色