Как бороться с ускорителями для отключенных элементов управления? - PullRequest
0 голосов
/ 13 июля 2009

У меня есть диалог, созданный из шаблона. Элементы управления перечислены в шаблоне в следующем порядке:

  • некоторые нерелевантные элементы управления
  • этикетка с ускорителем (давайте представим, что это Alt-A )
  • поле ввода
  • Кнопки ОК и Отмена

Обычно, когда я нажимаю Alt-A , фокус клавиатуры переносится в поле редактирования - по мере необходимости. Однако иногда мне нужно отключить окно редактирования.

Если я нажму Alt-A , когда поле редактирования отключено, эффект заключается в том, что нажата кнопка ОК, и это определенно не то, что я хочу. Я бы предпочел не предпринимать никаких действий в этом случае. Что я мог сделать, чтобы обойти это?

Ответы [ 4 ]

0 голосов
/ 09 апреля 2010

Прошло много времени с тех пор, как я работал в MFC и Windows SDK, но с точки зрения архитектуры должен быть обработчик событий, к которому можно подключиться. Поддерживать внутренний флаг, когда поле редактирования отключено. Когда поле редактирования отключено, используйте любые события Alt-A.

0 голосов
/ 13 июля 2009

Когда вы включаете / отключаете окно редактирования, вы можете либо включить / отключить элемент управления этикеткой с помощью ускорителя, либо просто добавить / удалить ускоритель на этикетке, изменив текст окна. Оба должны дать вам желаемое поведение.

0 голосов
/ 09 апреля 2010

Я только что попробовал это, и это, похоже, сработало ... хотя это хитрый метод.

После редактирования нажмите кнопку (произвольного размера). Измените свойство на кнопке на «Рисование владельца», но на самом деле не реализуйте логику рисования. Кроме того, убедитесь, что порядок табуляции установлен сразу после элемента управления редактирования.

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

ПРИМЕЧАНИЕ : Вы не можете просто удалить WS_VISIBLE из (или иным образом скрыть или отключить) кнопку, поскольку это может сделать элемент управления невидимым, но также не позволяет элементу управления находиться в порядке вкладок.

При использовании этого метода ваш фокус исчезнет (как на невидимой кнопке), когда вы нажмете на акселератор, когда контроль редактирования отключен. Если вам это не нравится, добавьте обработчик к новой невидимой кнопке, чтобы установить фокус на то место, где вы хотите, в случае, если контроль редактирования отключен. Таким образом, акселератор нажимает кнопку, вызывает обработчик, который восстанавливает фокус на том месте, где вы хотите.

Надеюсь, это поможет!

0 голосов
/ 13 июля 2009

Я не очень знаком с MFC, поэтому я пытаюсь ответить в общих чертах:

Насколько я могу судить, у вас возникает так называемый конфликт ускорителей. A - это клавиша ускорения как для поля редактирования, так и, я думаю, здесь кнопка Apply.

Решение состоит в том, чтобы избежать этой ситуации. Как вы сами обнаружили, неоднозначные клавиши ускорения являются PITA для пользователей. Поэтому в KDE у нас есть автоматизм, который назначает ускоренные ключи во время выполнения на основе некоторой эвристики. Этого достаточно часто, хотя иногда это дает неоптимальные результаты.

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

Но суть в том, что дубликаты ускоренных ключей не должны встречаться в одной и той же области видимости.

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