我只是维护一些MFC C ++代码,并且我有一个包含许多CEdit
个对象的屏幕。
我想为所有人实现OnFocus
事件,但只写一个方法来处理事件。
为此,我需要知道触发事件的CEdit
ID,但看起来MFC中OnFocus
事件的实现没有将此作为参数(与其他一些相比) OnCtlColor
之类的事件,其中CWnd*
个对象作为参数)。
我只是拒绝相信我必须为每个CEdit
实现一个小方法,将其ID传递给将要执行我想要的主方法!如果这是唯一的解决方案,那么MFC会感到羞耻!
答案 0 :(得分:3)
ON_CONTROL_RANGE
macro完全存在,允许将单个处理程序映射到多个控件上的同一事件。
首先,您需要确保控件ID是顺序的。 然后在标题中,您需要声明一个处理程序,该处理程序将控件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