MFC:如何在一个函数中捕获对话框的每个控件的设置焦点
MFC: How to catch set focus of each control of dialog in one function
我有"n"个对话框,它们具有相同的基本对话框。每个对话框都有自己的控件
- 编辑框
- 组合框
- 列表控件
- 等。
在基本对话框中,如何设置每个控件的焦点消息,例如,给出一个消息框
text("Hello I got focus, my ID is %d")?
最简单的方法是使用经典的子类化方法。问题是WM_SETFOCUS
没有通过消息循环泵送,因此PreTranslateMessage
无济于事。
这些类很好,有助于在不干扰MFC内容的情况下进行额外的子类化。保罗·迪·拉西亚写了CSubclassWnd
。PJ Naughter写道CHookWnd
。随着ATL的CWindowsImpl
.
所有这些类都允许轻松的附加子类化,即使窗口已经由 MFC 子类化。
您也可以使用"标准子类化"GetWindowLong
/SetWindowLong
。
根据这篇SO文章,您可以挂钩WM_SETFOCUS
消息。
可以通过将 GetDlgCtrlID
与挂钩返回的hwnd
一起使用来获取控件 ID。
但要小心弹出一个MessageBox
,这会改变焦点并触发你的钩子过程,让它进入循环!
正如 Jerry 已经说过的 make a hook,通过 GetParent() 和 SendMessage(hParentWND, WM_MESSAGE, lParam, wParam) 获取父窗口处理程序。
当然,您应该在父窗口中处理WM_MESSAGE。
顺便说一句,当窗口获得焦点时,框架调用OnSetFocus函数。
相关文章:
- 如何在Qbutton的帮助下更改Q对话框的宽度
- 当对话框被接受时,如何用参数调用槽
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 如何多次询问来自QML对话框的输入?
- 选择文件对话框错误
- 自定义对话框(源自QDialog)不会关闭(Android)
- 如何在 MFC 对话框中使用 OnDraw
- 在C++中创建文件夹选取器对话框的最简单方法是什么?
- 从资源视图访问对话框时出现问题
- 如何在对话框首次启动时禁用编辑控件的焦点?
- MFC 结束对话框崩溃时模式对话框没有焦点
- 将焦点设置在MFC视图中托管的无模式对话框上
- 使用对话框控件而不窃取焦点
- MFC:如何在一个函数中捕获对话框的每个控件的设置焦点
- Qt应用程序在使用文件打开对话框后将焦点切换到其他应用程序
- MFC 对话框在失去焦点时冻结
- 隐藏的对话框暂时占据焦点
- 实现不会从全屏应用程序中窃取焦点的通知对话框?
- 显示对话框后无法将焦点返回到主窗口
- 如何在 TabCtrl 内的子对话框中将焦点设置为 CEdit