Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Асемблер ВІДПОВІДІ!!!.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
123.78 Кб
Скачать

16. Використання акселераторів у файлах ресурсу.

Акселератори. Акселератор дозволяє вибирати пункт меню просто поєднанням клавіш. ^

Це дуже зручно і швидко. Таблиця акселераторів є ресурсом, ім’я якого повинне збігатися з ім’ям того меню (ресурсу), пункти якого вона визначає.

Ось приклад такої таблиці. Визначається один акселератор на пункт меню MENUP, що має ідентифікатор 4.

MENUP ACCELERATORS {

VKJF5, 4, VIRTKEY

} '

Загальний вигляд таблиці акселераторів Ім’я ACCELERATORS

Клавіша 1, Ідентифікатор пункту меню (1) [,тип] [,параметр]

Клавіша 2, Ідентифікатор пункту меню (2) [,тип] [,параметр]

Клавіша 3, Ідентифікатор пункту меню (3) [,ran] [,параметр]

Клавіша N, Ідентифікатор пункту мето (N) [.тип] [.параметр]

}

Розглянемо представлену схему. Клавіша - це або символ у лапках, або код ASCII символу, або віртуальна клавіша. Якщо спочатку іде код символу, то тип задається як ASCII. Якщо використовується віртуальна клавіша, то тип визначається як віртуальний. Всі назви (макроімена) віртуальних клавіш можна знайти у файлах - (window®,h).

Параметр може приймати одне з наступних значень: NOINVERT, Alt, Control, Shift. Значення NOINVERT означає, що не підсвічується обраний за допомогою акселератора пункт меню. Значення ALT, SHIFT, CONTROL означають, що, крім клавіші, визначеної в акселераторі, повинна бути натиснута одна з керуючих клавіш. Крім цього, якщо клавіша визначається в лапках, то натискання при цьому клавіші CONTROL визначається знаком "^": "^ А". А тепер поговоримо про механізм роботи акселераторів. Для того щоб акселератори працювали, необхідно виконати дві умови: Повинна бути завантажена таблиця акселераторів. Для цього використовується функція LoadAccelerators. Повідомлення, що прийшли від акселератора, слід перетворити на повідомлення WM_COMMAND. Тут нам стане в нагоді функція TranslateAccelerator. Зупинимося докладніше на другому пункті. Функція TranslateAccelerator перетворить повідомлення WMKEYDOWN і WMJ5YSKEYDOWN в повідомлення WM COMMAND і WM_SYSCOMMAND відповідно. При цьому в старшому слові параметра WPARAM поміщається 1, як відмінність для акселератора. У молодшому слові, як Ви пам'ятаєте, міститься ідентифікатор пункту меню. Виникає питання: для чого необхідні два повідомлення WM_COMMAND і WM_SYSCOMMAND? Тут все закономірно: повідомлення WM_SYSCOMMAND генерується для пунктів системного меню або меню вікна Функція TranslateAccelerator повертає ненульове значення, якщо було вироблено перетворення повідомлення акселератора, в іншому випадку повертається 0. Природно включити виклик цієї функції в цикл повідомлень. Ось цей фрагмент.

MSG_LOOP

PUSH 0

PUSH 0

PUSH 0

PUSH OFFSET MSG

CALL GetMessageA@ 16

CMP EAX, 0

JE END_LOOP

PUSH OFFSET MSG

PUSH [ACC]

PUSH [NEWHWND]

CALL TranslateAcceleratorA@12

CMP EAX ,0

JNE MSG_LOOP

PUSH OFFSET MSG

CALL TranslateMessage@4

PUSH OFFSET MSG

CALL DispatchMessageA@4

JMP MSG_LOOP

END LOOP:

17. Ресурси. Переваги використання ресурсів у програмах.

В операційну систему Windows введено поняття ресурсу. Ресурс являє собою якийсь візуальний елемент з заданими властивостями, що зберігається в виконуваний файл окремо від коду і даних, який може відображатися спеціальними функціями.

Використання ресурсів дає дві цілком певні вигоди:

Ресурси завантажуються в пам'ять лише при зверненні до них. тобто реалізується економія пам'яті.

Властивості ресурсів підтримуються системою автоматично, не вимагаючи від програміста написання додаткового коду.

Опис ресурсів зберігається окремо від програми в текстовому файлі (*. RC) і компілюються (*. Res) спеціальним транслятором ресурсів.

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