簡體   English   中英

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 的情況下進行額外的子類化。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM