![]() |
|
|
![]()
|
|
| OXOTHUK |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.9.2005 Репутация: нет Всего: 6 |
Я делаю программу на MSVC++6 у меня есть дилоговое окно на котором куча кнопочек/ Там нет акселераций и я добавил в ресурс одну, открыл ClassWizard он сказал что она не проассоциирована и я проассоциировал её с CProgramDlg. Написал в акселераторе название кнопочки и клавиши/ Но всё равно не пашет - как это делается?!
|
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Для ускорения доступа к элементам меню при помощи клавиатуры, а также назначения тех или иных функций, не связанных с меню, комбинациям клавиш, в Windows используется так называемая таблица акселераторов (accelerators table). Она находится в ресурсах приложения и определяет соответствия между акселератором - комбинацией клавиш - и значением параметра WM_COMMAND, передающимся в функцию окна при ее нажатии. Чтобы акселераторы начали работать, необходимо описать их в таблице акселераторов и загрузить эту таблицу из ресурсов. Для создания акселераторов существует два способа: создание в файле ресурсов (руками) и создание с помощью некоторого визуального инструмента типа AppStudio (щелкаете правой кнопкой по любому ресурсу на вкладке ресурсов в Visual Studio, выбираете Insert (добавить), выбираете пункт Accelerators (акселераторы) и нажимаете на кнопку New (новая)). В файле ресурсов приложения таблица акселераторов описывается следующим образом: <ID> ACCELERATORS BEGIN Key, ID, [Type], [Modifiers] ... END Идентификатор ID используется для ссылки на таблицу акселераторов, а BEGIN и END определяют операторные скобки, внутри которых располагаются строки описания акселераторов. Key - определяет клавишу, которая будет использована для создания акселератора. Можно использовать символ в коде ACSCII в кавычках (например, "C"); комбинацию символов ASCII со знаком "^" (например, "^C"), что соответствует комбинации клавиш Ctrl+C; код ASCII клавиши в виде целого значения или виртуальный код клавиши в символьном или цифровом виде. ID - задает идентификатор команды WM_COMMAND, которая направляется в функцию окна при использовании акселератора. Type - определяет тип клавиши: ASCII или виртуальная (значение ASCII или VirtKey). Modifiers - поле доступно, если выбрана виртуальная клавиша; тогда можно указывать параметры Ctrl, Alt или Shift. При использовании визуального средства все намного проще: щелкаете по строке акселераторов (как их создать в визуальной среде описывалось выше) и перед вами появляется следующее диалоговое окно Теперь вам необходимо выбрать из списка с именем ID идентификатор, к которому вы хотите "прицепить" акселератор; нажать кнопку Next Key Typed и нажать на клавиатуре понравившуюся вам комбинацию клавиш (либо вместо нажатия на кнопку Next Key Typed можно выбрать все параметры (Key, Type, Modifiers) руками). После выбора не забудьте нажать Enter для подтверждения выбора. Вот, в принципе, и все. Но, на всякий случай, приведу один из возможных вариантов присоединения акселераторов к диалоговому окну. Создаем в классе переменную типа HACCEL (например, HACCEL h) В функции OnInitDialog загружаем акселераторы из ресурса: h = ::LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1)); И в функции PreTranslateMessage отлавливаем нажатия на клавиатуре: if(pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST) return ::TranslateAccelerator(m_hWnd, h, pMsg); Где m_hWnd - указатель на окно, принимающее сообщение. Это сообщение отредактировал(а) Coocky - 22.9.2005, 11:27 Присоединённый файл ( Кол-во скачиваний: 9 )
accelerators.rar 26,33 Kb-------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| Гость_dima |
|
|||
|
Unregistered |
Coocky
Ого Все бы так обьясняли... Показательное выступление местного гуру |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |