c++ - 如何为 MFC CEdit ON_EN_SETFOCUS 实现事件处理程序?

标签 c++ mfc

我只是在维护一些 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/

相关文章:

c++ - 计算平方根时出现SegFault错误(牛顿法)

c++ - 我如何使用 boost::spirit::qi 解析行尾?

c++ - _stprintf() 只读 C++ 和 MFC 中的第一个字符

MFC 菜单项保持灰色

c++ - MFC C++ 将枚举值插入到 CArray

c++ - 从 Windows 注册表中保存的工作区检索窗口位置

c++ - 访问 std::string 中字符串的位置大于其大小的元素

C++ 不能在 cout 中使用 vector 和字符串文字

c++ - 客户端中断时如何通知服务器?

c# - 如何向 MFC 应用程序添加 list 并设置支持的操作系统?