如何实现MFC CEdit ON_EN_SETFOCUS的事件处理程序?

时间:2013-04-09 07:45:35

标签: c++ mfc

我只是维护一些MFC C ++代码,并且我有一个包含许多CEdit个对象的屏幕。

我想为所有人实现OnFocus事件,但只写一个方法来处理事件。

为此,我需要知道触发事件的CEdit ID,但看起来MFC中OnFocus事件的实现没有将此作为参数(与其他一些相比) OnCtlColor之类的事件,其中CWnd*个对象作为参数)。

我只是拒绝相信我必须为每个CEdit实现一个小方法,将其ID传递给将要执行我想要的主方法!如果这是唯一的解决方案,那么MFC会感到羞耻!

1 个答案:

答案 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