Поделиться через


Настройка мыши и клавиатуры

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

В диалоговом окне настройки пользователь может изменить пользовательские элементы управления для мыши и клавиатуры. Чтобы отобразить это диалоговое окно, пользователь указывает на настройку в меню "Вид", а затем щелкает панели инструментов и закрепление. В диалоговом окне пользователь щелкает вкладку "Клавиатура " или вкладку "Мышь ".

Настройка клавиатуры

На следующем рисунке показана вкладка "Клавиатура " диалогового окна "Настройка ".

Keyboard tab in the Customize dialog box.
Вкладка "Настройка клавиатуры"

Пользователь взаимодействует с вкладкой клавиатуры, чтобы назначить одну или несколько сочетаний клавиш команде. Доступные команды перечислены в левой части вкладки. Пользователь может выбрать любую доступную команду в меню. С сочетанием клавиш можно связать только команды меню. После ввода нового ярлыка кнопка "Назначить " станет включена. Когда пользователь нажимает эту кнопку, приложение связывает выбранную команду с этим ярлыком.

Все назначенные сочетания клавиш перечислены в списке в правом столбце. Пользователь также может выбрать отдельные сочетания клавиш и удалить их или сбросить все сопоставления для приложения.

Если вы хотите поддерживать эту настройку в приложении, необходимо создать объект CKeyboardManager . Чтобы создать CKeyboardManager объект, вызовите функцию CWinAppEx::InitKeyboardManager. Этот метод создает и инициализирует диспетчер клавиатуры. Если вы создаете диспетчер клавиатуры вручную, необходимо по-прежнему вызывать CWinAppEx::InitKeyboardManager его инициализацию.

Если вы используете мастер для создания приложения, мастер инициализирует диспетчер клавиатуры. После инициализации диспетчера клавиатуры платформа добавляет вкладку "Клавиатура " в диалоговое окно "Настройка ".

Настройка мыши

На следующем рисунке показана вкладка "Мышь " диалогового окна "Настройка ".

Mouse tab in the Customize dialog box.
Вкладка "Настройка мыши"

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

По умолчанию настройка мыши не включена при создании приложения с помощью мастера.

Включение настройки мыши

  1. Инициализировать объект CMouseManager путем вызова CWinAppEx::InitMouseManager.

  2. Получите указатель на диспетчер мыши с помощью CWinAppEx::GetMouseManager.

  3. Добавьте представления в диспетчер мыши с помощью метода CMouseManager::AddView . Сделайте это для каждого представления, которое вы хотите добавить в диспетчер мыши.

После инициализации диспетчера мыши платформа добавляет вкладку "Мышь " в диалоговое окно "Настройка ". Если вы не добавляете представления, доступ к вкладке приведет к необработанным исключениям. После создания списка представлений вкладка "Мышь " доступна пользователю.

При добавлении нового представления в диспетчер мыши вы дайте ему уникальный идентификатор. Если вы хотите поддерживать настройку мыши для окна, необходимо обработать сообщение WM_LBUTTONDBLCLICK и вызвать функцию CWinAppEx::OnViewDoubleClick . При вызове этой функции один из параметров — это идентификатор этого окна. Программист обязан отслеживать номера идентификаторов и объекты, связанные с ними.

Проблемы безопасности

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

Настраиваемые параметры хранятся в реестре. Изменив реестр, злоумышленник может заменить допустимый идентификатор пользовательского средства произвольным командой. Когда пользователь дважды щелкает представление, представление обрабатывает команду, которую злоумышленник посадил. Это может привести к неожиданному и потенциально опасному поведению.

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

Чтобы защититься от такой атаки, добавьте код в обработчик команд приложения, чтобы убедиться, что команда действительна перед выполнением. Не зависят от пользовательского интерфейса, чтобы предотвратить отправку команды в приложение.

См. также

Настройка для MFC
Класс CKeyboardManager
Класс CMouseManager
Вопросы безопасности во время настройки