У меня есть «n» диалогов, которые имеют одинаковый базовый диалог. Каждый диалог имеет свои собственные элементы управления
В базовом диалоге, как мне установить фокус сообщения каждого элемента управления и, например, дать окно сообщения с
text("Hello I got focus, my ID is %d")?
В соответствии с эта ТАКАЯ статья, Вы можете перехватить сообщение WM_SETFOCUS.
Вы можете получить контрольный идентификатор, используя GetDlgCtrlID с hwnd
вернулся на крючок.
Но остерегайтесь выскакивать MessageBox
, это изменит фокус и вызовет вашу ловушку, заставляя ее зацикливаться!
Как уже сказал Джерри, сделайте хук, обработчик родительского окна через GetParent () а также SendMessage (hParentWND, WM_MESSAGE, lParam, wParam).
Конечно, вы должны обработать WM_MESSAGE в родительском окне.
Кстати, рамки звонков OnSetFocus функция, когда окно получило фокус.
Самый простой способ — использовать классический метод создания подклассов. Проблема в том, что WM_SETFOCUS не прокачивается через сообщение Loop, поэтому PreTranslateMessage не поможет.
Есть несколько хороших классов, которые помогают выполнять дополнительные подклассы, не мешая работе MFC.
Пол Ди Ласкья написал CSubclassWnd. PJ Naughter написал CHookWnd. И с ATL есть CWindowsImpl.
Все эти классы позволяют легко создавать дополнительные подклассы, даже если MFC уже подклассирует окно.
Вы также можете использовать «стандартное наследование» GetWindowLong / SetWindowLong.