Предотвращение кражи фокуса / установки фокуса на вид - PullRequest
0 голосов
/ 09 октября 2008

У меня есть приложение MFC sdi, которое использует окно сплиттера, чтобы содержать элемент управления деревом рядом с основным видом, отображающим данные.

Когда пользователь выбирает что-то в дереве, это представление сохраняет фокус, пока пользователь не умышленно щелкнет в главном окне данных. Это означает, что все кнопки панели инструментов, связанные с основным видом, отключены.

Есть ли способ программно переключить фокус обратно на главный вид после того, как пользователь нажал на древовидный элемент управления? Или я делаю что-то в корне неправильно, используя CSplitterWnd и 2 представления?

1 Ответ

1 голос
/ 09 октября 2008

Вы не хотите возвращать фокус к другому виду, как только кто-то щелкнет по дереву: это сделает ваше приложение непригодным для использования. например Это не позволит пользователям перемещаться по дереву с помощью клавиатуры, поскольку дерево никогда не будет удерживать фокус достаточно долго.

Если вы действительно хотите, чтобы панель инструментов отображала состояние вашего второго вида (я не уверен, что это хорошая идея), у вас есть несколько вариантов. Сделай свой выбор. 2 приходят на ум:

  1. Ваше древовидное представление НЕ должно быть CView. Используйте простой CTreeCtrl. Не очень хорошо, потому что это как бы нарушает парадигму doc / view (например, больше не вызывается OnUpdate () дерева при каждом вызове UpdateAllViews ()).

  2. Не дать дереву стать активным видом. Для этого: 2.а При просмотре получает фокус (OnFocus ()):

STATIC_DOWNCAST (CFrameWnd, AfxMainWnd ()) -> SetActiveView (pTheOtherView);

2б. Извлеките класс CMySplitterWnd из CSplitterWnd, затем переопределите CMySplitterWnd :: SetActivePane (), чтобы запретить ему устанавливать древовидное представление в качестве активного представления.

В любом случае, добро пожаловать в удивительный мир внутренних устройств MFC, где погружение в исходный код является обязательным ежедневным видом спорта; -)

Редактировать: добавлено пропущенное НЕ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...