【问题标题】:Stop OnCtlColor() changing combobox's (edit control)'s "text color"停止 OnCtlColor() 更改组合框(编辑控件)的“文本颜色”
【发布时间】:2012-08-06 12:55:58
【问题描述】:

MFC 组合框确实是一个奇怪的设计。

我使用“下拉列表”类型的组合框。

HBRUSH CValueInputDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)  
{
    HBRUSH hBrush = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
    if (nCtlColor == CTLCOLOR_STATIC || nCtlColor == CTLCOLOR_EDIT)
    {
        pDC->SetTextColor(RGB(255, 255, 255));  
        pDC->SetBkMode(TRANSPARENT);  
        hBrush = (HBRUSH)GetStockObject(NULL_BRUSH);
    }    
    return hBrush;
}

我所做的就是让我所有的 CStatic 和 CEdit 颜色为白色。

但我发现我还将组合框的编辑更改为白色。

那是我不想要的。

那是我不想要的。我无法阻止它

pWnd->GetDlgCtrlID() == IDC_COMBO

这太不友好了。这个组合框。

【问题讨论】:

  • 不要责怪 MFC。这就是底层 Windows 控件的构建方式。

标签: mfc combobox


【解决方案1】:

编辑框是组合框的子框。试试这个:

pWnd->GetParent()->GetDlgCtrlID() == IDC_COMBO

【讨论】:

  • 这是正确的答案+1,为了进一步澄清你需要if (nCtlColor == CTLCOLOR_STATIC || (nCtlColor == CTLCOLOR_EDIT && pWnd->GetParent()->GetDlgCtrlID() != IDC_COMBO)) ...
猜你喜欢
  • 2013-12-18
  • 2018-12-27
  • 2023-04-01
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多