3

我有“n”个具有相同基本对话框的对话框。每个对话框都有自己的控件

  • 编辑框
  • 组合框
  • 列表控件
  • 等等

在基本对话框中,如何设置每个控件的焦点消息,例如,给一个消息框

text("Hello I got focus, my ID is %d")?
4

3 回答 3

1

最简单的方法是使用经典的子类化方法。问题是WM_SETFOCUS没有通过消息循环抽,所以PreTranslateMessage无济于事。

你有一些不错的类,它们有助于在不干扰 MFC 的情况下进行额外的子类化。保罗·迪·拉西亚写道CSubclassWnd。PJ Naughter 写道CHookWnd。并且用 ATL 了CWindowsImpl

即使窗口已经被 MFC 子类化,所有这些类都允许轻松附加子类化。

您也可以使用“标准子类化” GetWindowLong/ SetWindowLong

于 2013-09-25T08:44:30.600 回答
0

正如 Jerry 已经说过做一个钩子,通过 GetParent()SendMessage(hParentWND, WM_MESSAGE, lParam, wParam)获取父窗口处理程序。
当然,您应该在父窗口中处理 WM_MESSAGE。顺便说一句,当窗口获得焦点时
,框架调用OnSetFocus函数。

于 2013-09-24T19:55:12.403 回答
0

根据this SO article,您可以挂钩WM_SETFOCUS消息。

GetDlgCtrlID您可以通过与hwnd钩子返回的一起使用来获取控件 ID 。

但要小心弹出一个MessageBox,这会改变焦点并触发你的钩子进程,使其进入循环!

于 2013-09-25T06:53:08.543 回答