如果单击按钮,则在MFC中调用函数

时间:2013-10-14 06:07:58

标签: c++ function mfc call

我在MFC中创建了一个函数。

HBRUSH NeuerEintrag::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    m_ErrorBrush = new CBrush(RGB(255, 130, 130));
    if ((CTLCOLOR_EDIT == nCtlColor) && (IDC_EDIT1 == pWnd->GetDlgCtrlID()))
    {
        pDC->SetBkColor(RGB(255, 130, 130));
        return (HBRUSH)(m_ErrorBrush->GetSafeHandle()); 
    }
    return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}

每当我启动程序时,函数都会被调用。但我只想要,当我点击一个按钮时,该函数被调用。这是在antoher功能,但在同一类:

else
{
    MessageBox (_T("Überprüfen Sie ihre Eingaben"));
    // <-- HERE MUST THE FUNCTION BE CALLED
}   

我是MFC的新手,我真的不知道,我怎么能解决这个问题。有人可以解释我,我在哪里以及我要做什么来解决这个问题?

2 个答案:

答案 0 :(得分:1)

如果您需要有条件地为编辑框着色,请设置成员变量并在OnCtlColor()中进行检查,如:

a)在你的dialog.h文件中

BOOL m_bError;

b)在NeuerEintrag :: NeuerEintrag

m_bError = FALSE;

c)在你的MessageBox之后:用

替换// <-- HERE MUST THE FUNCTION BE CALLED
{   m_bError = TRUE;
    GetDlgItem(IDC_EDIT1)->Invalidate();
}

d)你的OnCtlColor函数

HBRUSH NeuerEintrag::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{   m_ErrorBrush = new CBrush(RGB(255, 130, 130));
    if (CTLCOLOR_EDIT == nCtlColor && IDC_EDIT1 == pWnd->GetDlgCtrlID() && m_bError)
    {   pDC->SetBkColor(RGB(255, 130, 130));
        return (HBRUSH)(m_ErrorBrush->GetSafeHandle()); 
    }
    return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}

e)记得将m_bError重置为FALSE并在验证返回正常时使编辑控件无效

答案 1 :(得分:1)

只要需要绘制控件,就会调用OnCtlColor。 如果您希望为控件提供特定的行为,例如以不同的颜色显示文本,您可以编写自己的编辑类来自行处理OnCtlColor。

TN062使用CYellowEdit显示此信息。与之前的答案一样,您可以在此课程中保留一个标志或颜色本身的值并使用它。

CodeProject

还有一个可以使用的课程