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

Call function in MFC if I click on Button

本文关键字:MFC 调用 函数 则在 单击 按钮 如果      更新时间:2023-10-16

我在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的新手,我真的不知道,我该如何解决这个问题。有人可以解释我,我必须在哪里以及做什么来解决这个问题吗?

如果您需要有条件地为编辑框着色,请设置一个成员变量并在您的OnCtlColor()中选中它,例如:

a) 在您的对话框.h 文件中

BOOL m_bError;

b) in NeuerEintrag::NeuerEintrag

m_bError = FALSE;

c) 在消息框之后:将// <-- 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,并在验证返回 OK 时使编辑控件失效

每当需要绘制控件时,都会调用OnCtlColor。如果要为控件提供特定行为(如以不同的颜色显示文本),则可以编写自己的编辑类来单独处理 OnCtlColor。

TN062 通过 CYellowEdit 显示这一点。与前面的答案一样,您可以在此类中保留一个标志或颜色本身的值并使用它。

CodeProject 中还有一个现成的类