MFC:如何在一个函数中抓取对话框中各个控件的焦点设置?

问题描述 投票:2回答:3

我有 "n "个对话框,它们有相同的基础对话框。每个对话框都有自己的控件

  • 编辑框
  • 组合框
  • 列表控制
  • 等。

在基础对话框中,我如何设置每个控件的焦点信息,例如,给一个信息框加上

text("Hello I got focus, my ID is %d")?
c++ mfc setfocus
3个回答
0
投票

根据 本篇,你可以钩住 WM_SETFOCUS 信息。

您可以通过使用 GetDlgCtrlID 随着 hwnd 被钩回。

但要小心弹出一个 MessageBox这将改变焦点并触发你的hook proc,使其进入一个循环!最简单的方法是使用经典的子类方法。


1
投票

最简单的方法是使用经典的子类方法。问题是 WM_SETFOCUS 并没有通过消息循环泵送,所以...。PreTranslateMessage 不会有任何帮助。

有一些很好的类可以帮助我们在不影响MFC的情况下进行额外的子类划分。Paul Di Lascia写道 CSubclassWnd. PJ Naughter写道 CHookWnd. 并与ATL有 CWindowsImpl.

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

你可以使用 "标准子类" GetWindowLongSetWindowLong 也是。


0
投票

正如Jerry所说,做一个钩子,通过 GetParent()SendMessage(hParentWND, WM_MESSAGE, lParam, wParam). 当然,你应该在你的父窗口中处理WM_MESSAGE。 另外,框架调用 OnSetFocus 窗口获得焦点时的功能。

© www.soinside.com 2019 - 2024. All rights reserved.