Управление фокусировкой ввода в приложении MFC SDI с несколькими представлениями - PullRequest
3 голосов
/ 02 августа 2009

У нас есть относительно большое приложение MFC, которое использует SDI для размещения ряда динамически создаваемых представлений на основе CView. Базовая структура приложения похожа на Outlook (древовидное представление слева, динамическое представление справа).

Я ломал голову над правильным способом изменения фокуса в приложении. Например, я хотел бы иметь возможность нажать «Tab», пока фокус находится в виде дерева (вид слева), и переместить фокус в вид справа. Хотя я мог бы захватить клавишу табуляции в дереве ctrl и вручную переключиться на соответствующий вид, у нас есть много разных типов представлений (некоторые основаны на CFormView), и много элементов управления разделителем, и я не уверен, есть ли более универсальный способ справиться с этим.

Я знаю, что установка фокуса в CDialog или CFormView проста (просто с помощью встроенного менеджера по порядку табуляции в Visual Studio), но приложение, в котором размещается несколько типов представлений, разделителей и т. Д., Намного сложнее. Например, если фокус в настоящее время находится в виде формы, когда я вкладываю в конец порядка вкладок представления формы, как мне обнаружить, что мне нужно изменить фокус ввода на другой (динамический) вид?

Приветствия и спасибо всем.

Даррен.

1 Ответ

0 голосов
/ 18 января 2012

Одним очевидным ответом было бы упростить сам интерфейс.

Другой способ - просто «вкладывать» внутри представления и требовать, чтобы пользователь использовал мышь для переключения с одного вида на другой; в качестве альтернативы, вы можете создать пункт меню вида и позволить пользователю выбирать вид, делая выбор меню (можно использовать клавиатуру, например, для выбора вида 1, нажав Alt-V-1).

Последним вариантом будет то, что вы упомянули сами: обнаружите клавишу Tab и обработайте все самостоятельно.

...