2013-04-09 87 views
0

我只是维护一些MFC C++代码,我有一个屏幕与许多CEdit对象。如何实现MFC CEdit的事件处理程序ON_EN_SETFOCUS?

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

要做到这一点,我需要知道CEdit ID触发事件,但它看起来像在MFC中OnFocus事件的实现没有这个作为一个参数(相对于其他一些事件,如OnCtlColorCWnd*对象作为参数)。

我只是拒绝相信我必须为每个单独的CEdit实现一个小方法,将它的ID传递给将要做我想做的主要方法!如果这是唯一的解决方案,可惜你MFC!

回答

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

+0

呀,工作,非常感谢!有一个很大的手动工作来排序的ID,但一旦我完成了,主要来源得到更整洁! – Andres 2013-04-09 11:34:53

+0

很高兴听到它。是的,这有时真的是处理ID的麻烦,特别是如果项目中的多个人员手动更改它们并且逻辑依赖于它们的顺序。 – 2013-04-09 14:22:56

相关问题