我只是在维护一些 MFC C++ 代码,并且我有一个包含许多 CEdit
对象的屏幕。
我想为所有这些实现 OnFocus
事件,但只编写一个方法来处理该事件。
为此,我需要知道触发事件的 CEdit
ID,但看起来 MFC 中 OnFocus
事件的实现没有将此作为参数(与 OnCtlColor
等具有 CWnd*
对象作为参数的其他事件相比)。
我只是拒绝相信我必须为每个 CEdit
将其 ID 传递给将执行我想要的操作的主要方法来实现一个小方法!。如果那是唯一的解决方案,那你 MFC 真丢脸!
最佳答案
ON_CONTROL_RANGE
macro存在正是为了允许将单个处理程序映射到多个控件上的同一事件。
首先,您需要确保您的控件 ID 是连续的。 然后在 header 中,您需要声明一个将控件 ID 作为参数的处理程序:
afx_msg void OnSetFocusMulti(UINT ctrlId);
这允许您在需要时区分处理程序中的发送者控件。
现在您需要将其添加到消息映射,而不是一堆ON_EN_SETFOCUS(IDC_EDIT1, &CMyDlg::OnSetfocus)
:
ON_CONTROL_RANGE(EN_SETFOCUS, IDC_EDIT1, IDC_EDIT_X, OnEnSetFocusMulti)
^ ^ ^ ^
// notification code | first ctrl | last ctrl | the handler
记录了其他消息映射宏 here
关于c++ - 如何为 MFC CEdit ON_EN_SETFOCUS 实现事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15896164/