Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка2_дрВ.doc
Скачиваний:
1
Добавлен:
19.08.2019
Размер:
851.97 Кб
Скачать

Використання гарячих клавіш

Використовуючи редактор ресурсів потрібно добавити в свою програму ресурс акселератора, присвоїти йому ідентифікатор (наприклад, MY_ACCEL) і призначити комбінації клавіш. Далі в цім же редакторі потрібно відкрити ресурс меню і добавити до необхідних пунктів опис закріплених за ними клавіш (наприклад, "&Відкрити \t Ctrl O"). Представимо код-опис програми.

Покроковий хід роботи для написання макету програми на мові С++ для використання акселераторів:

  1. В функцію WinMain добавляємо наступний код.

  2. .

  3. Завантажуємо таблицю акселераторів з ідентифікатором MY_ACCEL HACCEL hAccel = LoadAccelerators ( hInst, MAKEINTRESOURCE (MY_ACCEL )).

  4. .

  5. Додаємо в цикл обробки повідомлень перехоплювач акселераторних клавіш.

  6. Цикл з використанням функції GetMessage з параметрами: взяття адреси на параметр msg і NULL, 0, 0 .

  7. Якщо функція TranslateAccelerator з параметрами hWnd, hAccel і взяттям адреси параметра msg не нульова, то:

  8. Застосовуємо функцію TranslateMessage з параметром, взяттям адреси на структуру msg для перехоплення всіх оперативних клавіш.

  9. Застосовуємо функцію DispatchMessage з параметром, взяттям адреси на структуру msg для диспетчеризації.

Отже, для завантаження таблиці акселераторів використовується функція LoadAccelerators. Перший аргумент функції вказує на дескриптор додатка, а другий – для імені ресурсів таблиці акселераторів. Замість імені можна використовувати ідентифікатор, обробивши ідентифікатором MAKEINTRESOURCE. Потім необхідно встановити перехоплювач для всіх оперативних клавіш (функцію TranslateAccelerator). Перший аргумент функції вказує на дескриптор головного вікна програми. Другий повинен зберігати дескриптор таблиці акселераторів (HACCEL). Третій – вказує на структуру MSG. Тепер натиснення клавіш <Ctrl> <O> викличе виконання необхідної команди. Якщо ж програма втратила фокус, то краще використовувати "гарячі" клавіші, програмування яких вимагає дотримання 2 правил:

  1. Кожна "гаряча" клавіша реєструється в системі окремо і повинна мати унікальний глобальний ідентифікатор.

  2. Після завершення роботи з програмою потрібно видалити зареєстровані "гарячі" клавіші з системи.

Для реєстрації гарячої клавіші використовується функція RegisterHotKey. Перший аргумент функції вказує на дескриптор вікна, яке відкриває спеціальне повідомлення WM_HOTKEY, другий вказує на ідентифікатор "гарячої" клавіші, призначений розробником (значення в межах 0х0000 до 0хBFFF, для бібліотеки DLL - 0хС000 до 0хFFFF). Щоб запобігти конфліктів з іншими аналогічними значеннями, для бібліотеки DLL потрібно використовувати функцію GlobalAddAtom. Третій аргумент визначає модифікатор для комбінації клавіш, можливі значення для якого приведені в табл.3.20.

Константа

Опис

MOD_SHIFT

MOD_CONTROL

MOD_ALT

MOD_WIN

Необхідно утримувати любу клавішу <Shift> на клавіатурі

Необхідно утримувати любу клавішу <Ctrl> на клавіатурі

Необхідно утримувати любу клавішу <Alt> на клавіатурі

Необхідно утримувати любу клавішу <Win> на клавіатурі

Таблиця 3.20. Типи модифікатора клавіш

Четвертий аргумент задає код віртуальної клавіші (табл.3.19). При успішному виконанні функції буде повернуте значення 0. Якщо комбінація клавіш була зареєстрована в іншій програмі, то функція повідомить про помилку. Після реєстрації всіх клавіш потрібно додати обробник повідомлень WM_HOTKEY. Після завершення роботи потрібно визвати функцію UnregisterHotKey, яка видалить реєстрацію клавіш із системи. Наведемо приклад:

Покроковий хід роботи для написання макету програми на мові С++ для використання «гарячих» клавіш.

  1. Спочатку описуємо свої клавіші.

  2. Через макрос #define створюємо першу гарячу клавішу MY_HOT_KEY_1 (дескриптор) і WM_USER + 5001 (ідентифікатор). Значення 5001 – для уникнення конфліктів в системі.

  3. Так же створюємо другу гарячу клавішу MY_HOT_KEY_2 (дескриптор) і WM_USER + 5002 (ідентифікатор).

  4. Так же створюємо третю гарячу клавішу MY_HOT_KEY_3 (дескриптор) і WM_USER + 5003 (ідентифікатор).

  5. У головну функцію вікна додаємо підтримку своїх клавіш:

  6. Застосувавши макрос LRESULT CALLBACK для функціонального результату повернення, використовуємо функцію MyMainProc з параметрами hWnd типу HWND, message і wParam типу UINT, lParam типу LONG.

  7. Формуємо конструкцію вибору switch за значенням параметра message.

  8. Здійснюємо програмою вибір по значеннях параметра:

  9. Вибір WM_CREATE під час створення вікна реєстрації клавіш:

  10. Для 1-ї клавіші призначуємо комбінацію «Ctrl+F2». Застосовуємо функцію RegisterHotKey з параметрами: hWnd, MY_HOT_KEY_1, MOD_CONTROL, VK_F2.

  11. Для 2-ї клавіші призначуємо «Home». Застосовуємо функцію RegisterHotKey з параметрами: hWnd, NULL, VK_HOME.

  12. Для 3-ї клавіші призначуємо комбінацію «Ctrl+ Shift+F5». Застосовуємо функцію RegisterHotKey з параметрами: hWnd, MY_HOT_KEY_3, MOD_CONTROL | MOD_SHIFT, VK_F5.

  13. Закінчуємо блок вибору за значенням WM_CREATE.

  14. Вибір WM_HOTKEY - обробка гарячих клавіш:

  15. Організовуємо розгалуження вибору у цьому виборі:

  16. Формуємо конструкцію вибору switch за значенням параметра wParam, який має ідентифікатор.

  17. Здійснюємо програмою вибір по значеннях параметра:

  18. Вибір MY_HOT_KEY_1- для 1-ї гарячої клавіші.

  19. Виконуємо якусь свою команду.

  20. Закінчуємо блок вибору за значенням MY_HOT_KEY_1.

  21. Вибір MY_HOT_KEY_2- для 2-ї гарячої клавіші.

  22. Виконуємо якусь свою команду.

  23. Закінчуємо блок вибору за значенням MY_HOT_KEY_2.

  24. Вибір MY_HOT_KEY_3- для 3-ї гарячої клавіші.

  25. Виконуємо якусь свою команду.

  26. Закінчуємо блок вибору за значенням MY_HOT_KEY_3.

  27. Закінчуємо блок вибору за значенням WM_HOTKEY.

  28. Вибір WM_DESTROY – для завершення програми.

  29. Завершуємо програму і видаляємо реєстрацію клавіш:

  30. Застосовуємо функцію UnregisterHotKey з параметрами 0 і MY_HOT_KEY_1 – для видалення 1-ї гарячої клавіші.

  31. Застосовуємо функцію UnregisterHotKey з параметрами 0 і MY_HOT_KEY_2 – для видалення 2-ї гарячої клавіші.

  32. Застосовуємо функцію UnregisterHotKey з параметрами 0 і MY_HOT_KEY_3 – для видалення 3-ї гарячої клавіші.

  33. Закінчуємо блок вибору за значенням WM_DESTROY.

  34. Вибір default по замовчуванню.

  35. Повертаємо всі використані значення: hWnd, message, wParam, lParam за допомогою функції DefWindowProc.

  36. Закінчуємо блок вибору за значенням default.

  37. Повертаємо значення нуль для успішного виконання функції.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]