2. Типи даних в WinAPI
Основні типи даних
Andrey Gladky
KspDevelop@gmail.co
m 2
Тип Опис
BOOL
цей тип даних аналогічний bool. Він також має два
значення - 0 або 1. Тільки при використанні WINAPI
прийнято використовувати замість 0 специфікатор
NULL.
BYTE байт, ну або восьмібітне беззнакове ціле число. Аналог
- unsigned char.
DWORD 32-бітове беззнакове ціле. Аналоги: unsigned long int,
UINT.
INT 32-бітове ціле. Аналог - long int
LONG 32-бітове ціле - аналог все також long int.
NULL нульовий покажчик.
UINT 32-бітове беззнакове ціле. Аналоги: unsigned long int,
DWORD.
3. Типи даних в WinAPI
Дескрипторні типи даних. Дескриптор - це ідентифікатор будь-
якого об'єкта.
Andrey Gladky
KspDevelop@gmail.co
m 3
Тип Опис
HANDLE дескриптор об'єкта.
HBITMAP дескриптор растрового зображення.
HBRUSH дескриптор кисті.
HCURSOR дескриптор курсора.
HDC дескриптор контексту пристрою. Від
фрази handle device context.
HFONT дескриптор шрифту.
HICONS дескриптор криптограми.
HINSTANCE дескриптор екземпляра додатка.
HMENU дескриптор меню.
HPEN дескриптор пера.
HWND дескриптор вікна. Від фрази handle
window.
4. Типи даних в WinAPI
Строкові типи даних
Є два види кодувань символів: ANSI і UNICODE. Однобайтні
символи відносяться до ANSI, двухбайтові - до кодування
UNICODE.
Допоміжні типи
Andrey Gladky
KspDevelop@gmail.co
m 4
Тип Опис
wchar_t Двобайтовий чар - Unicode
char Однобайтовий чар - ANSI
Тип Опис
LPARAM тип для опису lParam (long parameter).
Використовуються разом з wparam в деяких функціях.
LRESULT значення, що повертається віконної процедурою має
тип long.
WPARAM тип для опису wParam (word parameter).
Використовуються разом з lParam в деяких функціях.
5. Події
Подія - це повідомлення, яке виникає в різних точках
виконуваного коду при виконанні певних умов.
Події призначені для того, щоб мати можливість передбачити
реакцію програмного забезпечення.
Для вирішення поставленого завдання створюються
обробники подій: як тільки програма потрапляє в заданий
стан, відбувається подія, надсилається повідомлення, а
обробник перехоплює це повідомлення.
Подія - це перехід об'єкта з одного стану в інший. Взаємодія
об'єктів також здійснюється за допомогою подій: зміна стану
одного об'єкта призводить до зміни стану іншого об'єкта, а
подія виявляється засобом зв'язку між об'єктами.
Andrey Gladky
KspDevelop@gmail.co
m 5
6. Події
Подія Опис
WM_KEYDOWN Ця подія генерується кожен раз, коли натискається
клавіша на клавіатурі.
WM_KEYUP Ця подія генерується коли натиснута клавіша буде
відпущена.
WM_LBUTTONDOWN Ця подія генерується коли користувач натискає ліву
кнопку миші, якщо покажчик миші знаходиться в межах
вікна.
WM_LBUTTONUP Ця подія генерується коли користувач відпускає ліву
кнопку миші, якщо покажчик миші знаходиться в межах
вікна.
WM_SETFOCUS Ця подія генерується коли додаток отримує фокус
клавіатури. Наприклад, подія WM_SETFOCUS
генерується, коли ви клацаєте мишею по неактивному
вікні.
WM_SIZE Ця подія повідомляє вікно, що його розміри був змінений.
Andrey Gladky
KspDevelop@gmail.co
m 6
8. Каркас Windows додатків
Andrey Gladky KspDevelop@gmail.com 8
Щоб мати можливість працювати з віконним інтерфейсом, або
каркасом, Windows-додаток повинен виконати деякі стандартні дії:
1. Визначити клас вікна.
2. Зареєструвати вікно.
3. Створити вікно даного класу.
4. Показати вікно.
5. Запустити цикл обробки повідомлень.
Клас вікна - структура, що визначає його властивості.
9. Повідомлення
Зміни в стані апаратних засобів, самій операційній системі, інших
додатках, які можуть вплинути на хід виконання завдання,
називаються подіями.
Додатки сповіщаються про події через повідомлення, які їм
посилає Windows.
Вся система Windows побудована на передачі, приймані та
обробки повідомлень. Замість безпосереднього контролю за
станом пристроїв введення-виведення додаток повинен очікувати
надходження відповідного повідомлення від операційної системи.
Windows створює спеціальні черги повідомлень, в які
направляються повідомлення для додатків. Додатки, в свою чергу,
повинні вибирати повідомлення з цієї черги і обробляти їх
відповідним чином.
Крім того, вони самі можуть при необхідності посилати
повідомлення операційній системі та іншим додатків.
Andrey Gladky
KspDevelop@gmail.co
m 9
10. Система повідомлень в
Windows
Апаратні повідомлення
Andrey Gladky
KspDevelop@gmail.co
m 10
Повідомлення Опис
WM_LBUTTONDBLCLK Подвійне натискання лівої кнопки миші
WM_LBUTTONDOWN Натискання лівої кнопки
WM_LBUTTONUP Відпускання лівої кнопки
WM_MBUTTONDBLCLK Подвійне натискання середньої кнопки
WM_MBUTTONDOWN Натискання середньої кнопки
WM_MBUTTONUP Відпускання середньої кнопки
WM_MOUSEMOVE Переміщення миші
WM_RBUTTONDBLCLK Подвійне натискання правої кнопки миші
WM_RBUTTONDOWN Натискання правої кнопки
WM_RBUTTONUP Відпускання правої кнопки
11. Система повідомлень в
Windows Повідомлення від клавіатури
Andrey Gladky
KspDevelop@gmail.co
m 11
Повідомлення Опис
WM_CHAR введення символу
WM_DEADCHAR Діакритичний знак (наголос і т. Д.)
WM_KEYDOWN Була натиснута клавіша
WM_KEYUP Була відпущена клавіша
WM_SYSCHAR Введення спеціальних символів
WM_SYSDEADCHAR Спеціальний діакритичний знак
WM_SYSKEYDOWN Була натиснута спеціальна клавіша
WM_SYSKEYUP Була відпущена спеціальна клавіша
12. Система повідомлень в
WindowsВіконні повідомлення:
http://www.realcoding.net/articles/prilozhenie-2-osnovnye-tipy-
soobshchenii-windows.html
Andrey Gladky
KspDevelop@gmail.co
m 12
Повідомлення Опис
WM_ACTIVATE Вікно активно
WM_ACTIVATEAPP додаток активно
WM_СREATE Вікно було створено
WM_DESTROY Вікно було знищено
WM_ENABLE Був дозволено введення у вікно
WM_KILLFOCUS Вікно втратило фокус вводу від клавіатури
WM_MOUSEACTIVATE Вікно стане активним після натискання
кнопки миші
WM_MOVE Переміщення вікна
WM_SETFOCUS Вікно було переміщено
WM_S1ZE Вікно змінило розмір
13. Черга повідомлень
Насамперед повідомлення потрапляють в системну чергу
повідомлень Windows. Далі з неї повідомлення розподіляються
в черзі повідомлень додатків. Для кожного додатка
створюється своя черга повідомлень.
Черга повідомленнь додатків може поповнюватися не тільки із
системної черги. Будь-який додаток може послати
повідомлення будь-якому іншому додатку, в тому числі і сам
собі.
Обробка повідомлень
Andrey Gladky
KspDevelop@gmail.co
m 13
MSG msg;
while(GetMessage(&msg, 0, 0, 0))
{
DispatchMessage(&msg);
}
14. Вікна
Вікно - це прямокутна ділянка екрану, в якому додаток
відображає інформацію і отримує реакцію від користувача.
Andrey Gladky
KspDevelop@gmail.co
m 14
15. Вікна. Дескриптор вікна
Одним з найважливіших понять в Windows-програмуванні є
поняття об'єктного дескриптора (handle). У Windows всі
об'єкти - кисті, растри, покажчики миші, контексти пристроїв,
вікна, екземпляри программ- ідентифікуються 32-розрядним (в
Winl6 - 16-розрядним) цілим числом, яке називається
дескриптором.
Дескриптор вікна.
Після створення вікна, функція, що його створює повертає
дескриптор вікна (window handle), який унікально ідентифікує
вікно. Дескриптор вікна має тип даних HWND; прикладна
програма повинна використовувати цей тип при оголошенні
змінної, яка містить в собі дескриптор вікна. Прикладна
програма використовує цей дескриптор в інших функціях, щоб
направити їх дії на це вікно.
Andrey Gladky
KspDevelop@gmail.co
m 15
16. Вікна. Стилі вікна
Стиль Опис
WS_BORDER Створення вікна з рамкою.
WS_CAPTION Створення вікна з заголовком
WS_CHILDWINDOW Створення дочірнього вікна
WS_CLIPCHILDREN Виключає область, зайняту дочірнім вікном, при
виведенні в батьківське вікно.
WS_CLIPSIBLINGS Використовується спільно зі стилем WS_CHILD для
відтворення в дочірньому вікні областей кліпу, що
перекриваються іншими вікнами.
WS_DISABLED Створює вікно, яке недоступно.
WS_DLGFRAME Створює вікно з подвійною рамкою, без заголовка.
WS_GROUP Дозволяє об'єднувати елементи управління в групи.
WS_HSCROLL Створює вікно з горизонтальною смугою прокрутки.
WS_MAXIMIZE Створює вікно максимального розміру.
Andrey Gladky
KspDevelop@gmail.co
m 16
17. Вікна. Стилі вікна
Стиль Опис
WS_MAXIMIZEBOX Створює вікно з кнопкою розгортання вікна.
WS_MINIMIZE Створює вікно мінімального розміру.
WS_ICONIC Створює спочатку згорнуте вікно
WS_MINIMIZEBOX Створює вікно з кнопкою згортання.
WS_OVERLAPPED Створює перекриваюче вікно
WS_SYSMENU Створює вікно з кнопкою системного меню
WS_TABSTOP Визначає елементи управління, перехід до яких
може бути виконаний по клавіші TAB.
WS_VISIBLE Створює спочатку невідображене вікно.
WS_VSCROLL Створює вікно з горизонтальною смугою прокрутки.
WS_THICKFRAME Створює вікно з рамкою, використовуваної для
зміни
Andrey Gladky
KspDevelop@gmail.co
m 17
18. Вікна. Віконний клас
Andrey Gladky
KspDevelop@gmail.co
m 18
Віконний клас (window class), або клас вікна - це структура, що
визначає основні характеристики вікна. До них відносяться
стиль вікна і пов'язані з вікном ресурси, такі як піктограма,
курсор, меню і кисть для зафарбовування фону. Крім того, одне
з полів структури містить адресу віконної процедури,
призначеної для обробки повідомлень, одержуваних будь-яким
вікном даного класу.
Посилання на віконний клас передається функції
CreateWindow, призначеної для створення вікна.
Використання класу вікна дозволяє створювати безліч вікон на
основі одного і того ж віконного класу і, отже, використовувати
одну й ту ж віконну процедуру. Наприклад, всі кнопки в
програмах Windows створені на основі віконного класу
BUTTON.
19. Вікна. Віконна процедура
Andrey Gladky
KspDevelop@gmail.co
m 19
Віконна процедура класу, розташована в динамічно
завантажувальній бібліотеці, управляє обробкою повідомлень
для всіх кнопок всіх вікон.
Аналогічні системні класи є і для інших елементів управління,
таких як, наприклад, списки і поля редагування. У сукупності
ці класи називаються стандартними віконними класами.
Windows містить стандартний віконний клас також і для
діалогових вікон, що грають важливу роль в графічному
інтерфейсі користувача.