我有 "n "个对话框,它们有相同的基础对话框。每个对话框都有自己的控件
在基础对话框中,我如何设置每个控件的焦点信息,例如,给一个信息框加上
text("Hello I got focus, my ID is %d")?
根据 本篇,你可以钩住 WM_SETFOCUS
信息。
您可以通过使用 GetDlgCtrlID
随着 hwnd
被钩回。
但要小心弹出一个 MessageBox
这将改变焦点并触发你的hook proc,使其进入一个循环!最简单的方法是使用经典的子类方法。
最简单的方法是使用经典的子类方法。问题是 WM_SETFOCUS
并没有通过消息循环泵送,所以...。PreTranslateMessage
不会有任何帮助。
有一些很好的类可以帮助我们在不影响MFC的情况下进行额外的子类划分。Paul Di Lascia写道 CSubclassWnd
. PJ Naughter写道 CHookWnd
. 并与ATL有 CWindowsImpl
.
所有这些类都允许轻松地附加子类,即使一个窗口已经被MFC子类化。
你可以使用 "标准子类" GetWindowLong
SetWindowLong
也是。
正如Jerry所说,做一个钩子,通过 GetParent() 和 SendMessage(hParentWND, WM_MESSAGE, lParam, wParam). 当然,你应该在你的父窗口中处理WM_MESSAGE。 另外,框架调用 OnSetFocus 窗口获得焦点时的功能。