2010-06-17 2 views
1

Я пишу приложение MFC и нуждаюсь в кнопке, которая не отталкивает фокус ввода от другого окна.Как я могу помешать CWnd получить фокус?

Удаление стиля WS_TABSTOP, к сожалению, не помогает, когда пользователь нажимает кнопку с помощью мыши. Когда я блокирую WM_LBUTTONDOWN, я не получаю визуально нажатую индикацию, так что это тоже не сработает.

ответ

3

Если есть специальное окно, которое вы хотите сохранить в фокусе, вы можете просто заставить фокус вернуться в свое окно с помощью команды CWnd::SetFocus() в обработчике OnLButtonDown вашей кнопки.

Если вы хотите, чтобы фокус был восстановлен в одном из нескольких окон, вы можете попробовать подклассифицировать CButton и захватить сообщение CWnd::OnSetFocus(), которое отправляется, когда фокус клавиатуры изменяется на кнопку.

OnSetFocus() событие включает в себя CWnd элемента управления, только что потерял фокус, так что вы можете вручную поместить его обратно, либо как часть самого OnSetFocus() события или позже как часть OnLButtonDown() обработчика снова.