
- •Теоретичні положення
- •1.1 Створення ресурсів методом ручної компіляції
- •1.2 Детальний опис наведеного прикладу.
- •1.2.1 Меню
- •1.2.2. Приєднання ресурсу типу файл.
- •1.2.3. Діалогові вікна
- •2. Програмні засоби для створення ресурсних даних
- •2.1 Програма ResEd.Exe
- •2.1.1. Діалогове вікно.
- •2.1.1.1 Створення діалогового вікна
- •2.1.1.2 Редагування значення стилю вікна.
- •2.1.2. Приєднуємо малюнок.
- •2.1.3. Створення меню
- •2.1.3.1 Додання до проекту меню
- •2.1.3.2 Опис кнопок і полів
- •2.1.3.3 Приклад створення меню.
- •2.2 Програма radAsm.Exe
- •2.2.1. Створення проекту з ресурсами
- •2.2.2. Файли проекту
- •Додання меню.
- •Додання файлових ресурсів.
- •Робота з ресурсами за допомогою winapi функцій
- •3.1. Завантаження ресурсів у пам‘ять.
- •Завантаження графічних зображень.
- •Робота з меню
- •3.4 Перебирання записів ресурсу.
- •Діалогові вікна.
- •Алгоритм створення діалогового вікна за допомогою ra
- •Функції роботи з діалоговим вікном
- •Структура програми при використанні діалогових вікон
- •Контрольні питання
- •Завдання:
3.4 Перебирання записів ресурсу.
Іноді стоїть задача знайти певний ресурс, тільки по його імені, типу або мовному кодуванню. Такий об‘єм інформації є замалим для функції FindResource. В такому випадки можна використати функції перебору(перерахування) елементів ресурсу. Перерахуємо їх.
EnumResourceLanguages
EnumResourceNames
EnumResourceTypes
Розглянемо синтаксис однієї з трьох функції.
EnumResourceTypes
hModule // модуль програми
lpEnumFunc, // вказівник на функ. обробки (callback function), тип EnumResTypeProc
lParam // параметр який передасться в функ. обробки як додатковий параметр
Приклад оголошення EnumResTypeProc в асемблері.
EnumResTypeProc proc hModule, lpszType, lParam :DWORD
Код програми………..
or eax,1
ret
EnumResTypeProc endp
hModule – хендл модуля меню що знайти
lpszType – вказівник на стрічку що містить назву "типу" знайденого ресурсу.
lParam – параметр який ми передали у функ. обробки . Див. EnumResourceTypes.
Функція буде продовжувати шукати, якщо функція обробки буде повертати TRUE (eax > 0). Тому ми пишемо or eax,1.
Рашта функції працюють по аналогії, але мають інші вхідні дані та інший вигляд функ. обробки.
Діалогові вікна.
Алгоритм створення діалогового вікна за допомогою ra
Для створення проекту з діалоговим вікном потрібно виконати наступні дії.
Запустити RadAsm.exe
Вибрати проект “Win32 App” та заповнити поля імені проекту та його опис та натиснути кнопку “Next”. Мал.15а.
а) б)
Мал .15 Створення прокту.
Вибрати шаблон програми “DialogApp.tpl”. Натиснути кнопку “Next”. Мал.15б.
На наступних 2-ох вікнах не зупиняємось, так як вони налаштовані по-замовчуванню і їх редагувати немає потреби. Так що, у них просто натискаємо “Next”.
У правій частині вікна RA тепер не 2 файли а 4. Мал. 16а
a)
Мал..16 Вікна RA
1. Файл коду
2. Файл змінних, констант структур і модулів
3. Файл діалог. В ньому можна редагувати діалог.
4. Файл ресурсу. Туди записується скрипт ресурсу, див. початок.
Для того щоб перейти у режим редагування діалогового вікна потрібно двічі кацнути по назві діалогового файлу. В нашому прикладі це файл “tmp_1.dlg” п.3 на мал 16а. Вікно редакції діалогу мал. 16б.
Опис редакції діалогу описаний вище.
Зробіть ваше попереднє завдання для 4 лабораторної з використанням діалогів.
Функції роботи з діалоговим вікном
Дочірні вікна (далі контроли), діалогового вікна практично нічим не відрізняються від звичайних вікон, створених функцією CreateWindowEx, окрім цього, що початково ви не отримуєте їхнього хендл . Замість цього ви маєте його ідентифікатор (Див мал.4 червона мамка поле ID). Дякуючи цьому значенню ви можете розрізняти вікна. Але як можна, наприклад, відправити повідомлення контролу маючи його ID. Цю проблему можна вирішити 2 способами. 1. SendDlgItemMessage 2. Визначити хендл вікна за допомогою функції GetDlgItem а потім працювати з вікном так само як в 4 лабораторній.
Переглянути наступні функції.
EndDialog
GetDlgCtrlID
GetDlgItem
GetDlgItemInt
GetDlgItemText
GetNextDlgGroupItem
GetNextDlgTabItem
IsDialogMessage
MapDialogRect
SendDlgItemMessage
SetDlgItemInt
SetDlgItemText