如果我单击按钮,则在 MFC 中调用函数
Call function in MFC if I click on Button
我在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 中还有一个现成的类
相关文章:
- MFC 中的窗口消息管理:添加基类调用是否是强制性的?
- C++ MFC 跟踪事件调用
- 问题: 从 MFC 调用 C# 未托管 COM C++
- 使用参数 + stdout + stderr 从命令行调用 MFC 应用程序
- 基于 MFC 对话框的应用程序无法调用对话框两次
- 如何正确调用 thiscall 函数,并将其作为 mfc 控件
- MFC DDX_RADIO会导致调用dodataexchange(dlgdata.cpp行286)时导致调试断言失败
- 如何调用OnEraseBkgnd()在另一个函数中重新绘制窗口?(MFC)
- 创建非托管常规 MFC DLL 并从托管 C++ .NET 应用调用它时出现问题
- 命令和UPDATE_COMMAND_UI处理程序未在 MFC dll 中调用
- MFC 的 CWinThread::P ostThreadMessage 处理器未调用
- 由于使用 MFC 时"__cdecl"和"__thiscall"调用约定不匹配而导致的链接器错误?
- mfc应用程序结束后,CMainFrame的析构函数调用发生访问冲突
- 如何在 MFC 中进行系统调用
- 如何在MFC C++MDI应用程序的ChildForm中调用FormView
- 从 MFC 客户端调用远程 COM 组件
- 如果我单击按钮,则在 MFC 中调用函数
- 调用 LoadFrame() MFC、RIBBON、VS2008 C++ 时断言失败
- 是否可能/有必要在单独的线程[MFC]中调用OnDraw
- 从MFC中的DoDataExchange确定调用方ID