如何以编程方式更改CEdit的颜色?

时间:2017-07-06 19:44:18

标签: c++ mfc dialog

我在C ++中使用MFC编写对话框。该对话框具有各种CEdit字段和验证所有字段的函数。如果任何字段填充了无效数据,则此功能禁用“确定”按钮。但是,我希望此函数也指示哪个字段无效。目前,该功能如下所示:

bool myDlg::validateAll() {
    bool bReturnVal = true;
    CBrush red_brush;
    COLORREF red = RGB(255, 204, 204);
    red_brush.CreateSolidBrush(red);
    CDC* pDC;

    if (!myCEditIsValid())) {
        bReturnVal = false;
        pDC = GetDlgItem(MY_CEDIT_ID)->GetDC();
        pDC->SetBkColor(red);
    }
    if (!myOtherCEditIsValid()) {
        bReturnVal = false;
        pDC = GetDlgItem(MY_OTHER_CEDIT_ID)->GetDC();
        pDC->SetBkColor(red);
    }
    ...
    More field validations here
    ...
    return bReturnVal;
}

这根本不显示任何颜色变化。我不确定为什么它不起作用。我想我需要更新显示器,但我无法找到如何做到这一点。

我在尝试使用OnCtlColor后,尝试使用OnCtlColor作为解决谷歌搜索中发现的许多类似问题的方法。这段代码看起来像这样:

HBRUSH myDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    COLORREF red = RGB(255, 204, 204);

    // TODO:  Change any attributes of the DC here
    if (pWnd -> GetDlgCtrlID() == MY_CEDIT_ID && !myCEditIsValid()) {
        pDC->SetBkColor(red);
    }

    if (pWnd->GetDlgCtrlID() == MY_OTHER_CEDIT_ID && !myOtherCEditIsValid()) {
        pDC->SetBkColor(red);
    }
    ...
    More field validations here
    ...
    //TODO:  Return a different brush if the default is not desired
    return hbr;
}

如果该字段无效,则仅使用当前焦点绘制该字段。没有其他无效字段被绘制。

如果有人能指出一个有效的解决方案来检查所有字段并在它们无效的情况下绘制它们,我将非常感激。

0 个答案:

没有答案