[英]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 的情況下進行額外的子類化。 Paul Di Lascia 編寫了CSubclassWnd
。 PJ Naughter 寫了CHookWnd
。 和 ATL 有CWindowsImpl
。
即使窗口已經被 MFC 子類化,所有這些類也允許輕松的附加子類化。
您也可以使用“標准子類化” GetWindowLong
/ SetWindowLong
。
正如 Jerry 已經說過的那樣做一個鈎子,通過GetParent()和SendMessage(hParentWND, WM_MESSAGE, lParam, wParam)獲取父窗口處理程序。
當然,您應該在父窗口中處理 WM_MESSAGE。
順便說一句,當窗口獲得焦點時,框架調用OnSetFocus函數。
根據this SO article ,您可以掛鈎WM_SETFOCUS
消息。
您可以通過使用GetDlgCtrlID
和鈎子返回的hwnd
來獲取控件 ID。
但是要小心彈出一個MessageBox
,它會改變焦點並觸發你的鈎子過程,使它進入一個循環!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.