0

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

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

为此,我需要知道CEdit触发事件的 ID,但看起来OnFocusMFC 中的事件实现没有 this 作为参数(与其他一些类似的事件相比OnCtlColorCWnd*对象作为参数)。

我只是拒绝相信我必须为每个CEdit将其 ID 传递给将执行我想要的操作的主要方法的单个方法实现一个小方法!如果这是唯一的解决方案,那你 MFC 真丢脸!

4

1 回答 1

3

ON_CONTROL_RANGE的存在正是为了允许将单个处理程序映射到多个控件上的同一事件。

首先,您需要确保您的控件 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

此处记录了其他消息映射宏

于 2013-04-09T08:11:37.753 回答