Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
MFC позволяет пользователю приложения настраивать способ обработки ввода клавиатуры и мыши. Пользователь может настроить ввод клавиатуры, назначив сочетания клавиш командам. Пользователь также может настроить входные данные мыши, выбрав команду, которая должна выполняться при двойном щелчке пользователя в определенных окнах приложения. В этом разделе объясняется, как настроить входные данные для приложения.
В диалоговом окне настройки пользователь может изменить пользовательские элементы управления для мыши и клавиатуры. Чтобы отобразить это диалоговое окно, пользователь наводит курсор на Настроить в меню Вид, а затем щелкает Панели инструментов и закрепление. В диалоговом окне пользователь щелкает вкладку "Клавиатура " или вкладку "Мышь ".
Настройка клавиатуры
На следующем рисунке показана вкладка "Клавиатура " диалогового окна "Настройка ".
Вкладка "Настройка клавиатуры"
Пользователь взаимодействует с вкладкой клавиатуры, чтобы назначить одну или несколько сочетаний клавиш команде. Доступные команды перечислены в левой части вкладки. Пользователь может выбрать любую доступную команду в меню. С сочетанием клавиш можно связать только команды меню. После ввода нового ярлыка кнопка "Назначить " станет включена. Когда пользователь нажимает эту кнопку, приложение связывает выбранную команду с этим ярлыком.
Все назначенные сочетания клавиш перечислены в списке в правом столбце. Пользователь также может выбрать отдельные сочетания клавиш и удалить их или сбросить все сопоставления для приложения.
Если вы хотите поддерживать эту настройку в приложении, необходимо создать объект CKeyboardManager . Чтобы создать CKeyboardManager
объект, вызовите функцию CWinAppEx::InitKeyboardManager. Этот метод создает и инициализирует диспетчер клавиатуры. Если вы создаете диспетчер клавиатуры вручную, необходимо по-прежнему вызвать CWinAppEx::InitKeyboardManager
для его инициализации.
Если вы используете Мастер для создания приложения, Мастер инициализирует диспетчер клавиатуры. После инициализации диспетчера клавиатуры платформа добавляет вкладку "Клавиатура " в диалоговое окно "Настройка ".
Настройка мыши
На следующем рисунке показана вкладка "Мышь " диалогового окна "Настройка ".
Вкладка "Настройка мыши"
Пользователь использует эту вкладку для назначения команды меню на действие двойного щелчка мышью. Пользователь выбирает представление в левой части окна, а затем использует элементы управления справа для связывания команды с действием двойного щелчка мыши. Когда пользователь нажимает кнопку "Закрыть", приложение выполняет связанную команду всякий раз, когда пользователь дважды щелкает в любом месте представления.
По умолчанию настройка мыши не включена при создании приложения с помощью мастера.
Включение настройки мыши
Инициализировать объект CMouseManager путем вызова CWinAppEx::InitMouseManager.
Получите указатель на диспетчер мыши с помощью CWinAppEx::GetMouseManager.
Добавьте представления в диспетчер мыши с помощью метода CMouseManager::AddView . Сделайте это для каждого вида, который вы хотите добавить в диспетчер мыши.
После инициализации диспетчера мыши платформа добавляет вкладку "Мышь " в диалоговое окно "Настройка ". Если вы не добавите представлений, при доступе к вкладке возникнет необработанное исключение. После создания списка представлений вкладка "Мышь " доступна пользователю.
При добавлении нового представления в диспетчер мыши вы даёте ему уникальный идентификатор. Если вы хотите поддерживать настройку мыши для окна, необходимо обработать сообщение WM_LBUTTONDBLCLICK и вызвать функцию CWinAppEx::OnViewDoubleClick . При вызове этой функции один из параметров — это идентификатор этого окна. Программист обязан отслеживать номера идентификаторов и объекты, связанные с ними.
Проблемы безопасности
Как описано в разделе "Определяемые пользователем средства", пользователь может связать идентификатор определяемого пользователем средства с событием двойного щелчка. Когда пользователь дважды щелкает на представление, приложение ищет инструмент пользователя, соответствующий связанному идентификатору. Если приложение находит соответствующее средство, оно выполняет средство. Если приложение не может найти подходящий инструмент, оно отправляет сообщение WM_COMMAND с идентификатором в представление, которое было дважды щелкнуто.
Настраиваемые параметры хранятся в реестре. Изменив реестр, злоумышленник может заменить допустимый идентификатор пользовательского средства произвольной командой. Когда пользователь дважды щелкает по представлению, оно обрабатывает команду, которую внедрил злоумышленник. Это может привести к неожиданному и потенциально опасному поведению.
Кроме того, такая атака может обойти меры защиты пользовательского интерфейса. Например, предположим, что приложение отключило печать. То есть в пользовательском интерфейсе меню "Печать " и кнопка недоступны. Как правило, это предотвращает печать приложения. Но если злоумышленник редактировал реестр, пользователь может отправить команду печати непосредственно, дважды щелкнув представление, обходя элементы пользовательского интерфейса, недоступные.
Чтобы защититься от такой атаки, добавьте код в обработчик команд приложения, чтобы убедиться, что команда действительна перед выполнением. Не полагайтесь на пользовательский интерфейс для предотвращения отправки команды в приложение.
См. также
Настройка для MFC
Класс CKeyboardManager
Класс CMouseManager
Последствия настройки с точки зрения безопасности