Win api module_1.2

19
WinAPI Модуль 1.2

Transcript of Win api module_1.2

Page 1: Win api module_1.2

WinAPIМодуль 1.2

Page 2: Win api module_1.2

2

В даному модулі: Типи даних в WinAPI Події Повідомлення Черга повідомлень Вікна

Andriy Gladkyy [email protected]

Page 3: Win api module_1.2

3

Типи даних в WinAPI Основні типи даних

Andrey Gladky [email protected]

Тип Опис

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.

Page 4: Win api module_1.2

4

Типи даних в WinAPI Дескрипторні типи даних. Дескриптор - це ідентифікатор будь-

якого об'єкта.

Andrey Gladky [email protected]

Тип ОписHANDLE  дескриптор об'єкта.

HBITMAP дескриптор растрового зображення.

HBRUSH  дескриптор кисті.

HCURSOR  дескриптор курсора.

HDC  дескриптор контексту пристрою. Від фрази handle device context.

HFONT  дескриптор шрифту.

HICONS  дескриптор криптограми.

HINSTANCE  дескриптор екземпляра додатка.

HMENU  дескриптор меню.

HPEN  дескриптор пера.

HWND  дескриптор вікна. Від фрази handle window.

Page 5: Win api module_1.2

5

Типи даних в WinAPI Строкові типи даних Є два види кодувань символів: ANSI і UNICODE. Однобайтні

символи відносяться до ANSI, двухбайтові - до кодування UNICODE.

Допоміжні типи

Andrey Gladky [email protected]

Тип Опис

wchar_t Двобайтовий чар - Unicode

char Однобайтовий чар - ANSI

Тип ОписLPARAM тип для опису lParam (long parameter).

Використовуються разом з wparam в деяких функціях.LRESULT значення, що повертається віконної процедурою має

тип long.WPARAM  тип для опису wParam (word parameter).

Використовуються разом з lParam в деяких функціях.

Page 6: Win api module_1.2

6

Події Подія - це повідомлення, яке виникає в різних точках

виконуваного коду при виконанні певних умов.

Події призначені для того, щоб мати можливість передбачити реакцію програмного забезпечення.

Для вирішення поставленого завдання створюються обробники подій: як тільки програма потрапляє в заданий стан, відбувається подія, надсилається повідомлення, а обробник перехоплює це повідомлення.

Подія - це перехід об'єкта з одного стану в інший. Взаємодія об'єктів також здійснюється за допомогою подій: зміна стану одного об'єкта призводить до зміни стану іншого об'єкта, а подія виявляється засобом зв'язку між об'єктами.

Andrey Gladky [email protected]

Page 7: Win api module_1.2

7

ПодіїПодія Опис

WM_KEYDOWN Ця подія генерується кожен раз, коли натискається клавіша на клавіатурі.

WM_KEYUP Ця подія генерується коли натиснута клавіша буде відпущена.

WM_LBUTTONDOWN Ця подія генерується коли користувач натискає ліву кнопку миші, якщо покажчик миші знаходиться в межах вікна.

WM_LBUTTONUP Ця подія генерується коли користувач відпускає ліву кнопку миші, якщо покажчик миші знаходиться в межах вікна.

WM_SETFOCUS Ця подія генерується коли додаток отримує фокус клавіатури. Наприклад, подія WM_SETFOCUS генерується, коли ви клацаєте мишею по неактивному вікні.

WM_SIZE Ця подія повідомляє вікно, що його розміри був змінений.

Andrey Gladky [email protected]

Page 8: Win api module_1.2

Andrey Gladky [email protected]

8

Архітектура додатків, побудованих на подіях

Page 9: Win api module_1.2

9

Повідомлення Зміни в стані апаратних засобів, самій операційній системі, інших

додатках, які можуть вплинути на хід виконання завдання, називаються подіями.

Додатки сповіщаються про події через повідомлення, які їм посилає Windows.

Вся система Windows побудована на передачі, приймані та обробки повідомлень. Замість безпосереднього контролю за станом пристроїв введення-виведення додаток повинен очікувати надходження відповідного повідомлення від операційної системи.

Windows створює спеціальні черги повідомлень, в які направляються повідомлення для додатків. Додатки, в свою чергу, повинні вибирати повідомлення з цієї черги і обробляти їх відповідним чином.

Крім того, вони самі можуть при необхідності посилати повідомлення операційній системі та іншим додатків.

Andrey Gladky [email protected]

Page 10: Win api module_1.2

10

Система повідомлень в Windows Апаратні повідомлення

Andrey Gladky [email protected]

Повідомлення ОписWM_LBUTTONDBLCLK Подвійне натискання лівої кнопки мишіWM_LBUTTONDOWN Натискання лівої кнопкиWM_LBUTTONUP Відпускання лівої кнопкиWM_MBUTTONDBLCLK Подвійне натискання середньої кнопкиWM_MBUTTONDOWN Натискання середньої кнопкиWM_MBUTTONUP Відпускання середньої кнопкиWM_MOUSEMOVE Переміщення мишіWM_RBUTTONDBLCLK Подвійне натискання правої кнопки мишіWM_RBUTTONDOWN Натискання правої кнопкиWM_RBUTTONUP Відпускання правої кнопки

Page 11: Win api module_1.2

11

Система повідомлень в Windows Повідомлення від клавіатури

Andrey Gladky [email protected]

Повідомлення Опис

WM_CHAR введення символуWM_DEADCHAR Діакритичний знак (наголос і т. Д.)WM_KEYDOWN Була натиснута клавішаWM_KEYUP Була відпущена клавішаWM_SYSCHAR Введення спеціальних символівWM_SYSDEADCHAR Спеціальний діакритичний знакWM_SYSKEYDOWN Була натиснута спеціальна клавішаWM_SYSKEYUP Була відпущена спеціальна клавіша

Page 12: Win api module_1.2

12

Система повідомлень в WindowsВіконні повідомлення:

http://www.realcoding.net/articles/prilozhenie-2-osnovnye-tipy-soobshchenii-windows.htmlAndrey Gladky

[email protected]

Повідомлення ОписWM_ACTIVATE Вікно активноWM_ACTIVATEAPP додаток активноWM_СREATE Вікно було створеноWM_DESTROY Вікно було знищеноWM_ENABLE Був дозволено введення у вікноWM_KILLFOCUS Вікно втратило фокус вводу від клавіатуриWM_MOUSEACTIVATE Вікно стане активним після натискання

кнопки мишіWM_MOVE Переміщення вікнаWM_SETFOCUS Вікно було переміщеноWM_S1ZE Вікно змінило розмір

Page 13: Win api module_1.2

13

Черга повідомлень Насамперед повідомлення потрапляють в системну чергу

повідомлень Windows. Далі з неї повідомлення розподіляються в черзі повідомлень додатків. Для кожного додатка створюється своя черга повідомлень.

Черга повідомленнь додатків може поповнюватися не тільки із системної черги. Будь-який додаток може послати повідомлення будь-якому іншому додатку, в тому числі і сам собі.

Обробка повідомлень

Andrey Gladky [email protected]

MSG msg; while(GetMessage(&msg, 0, 0, 0)) { DispatchMessage(&msg); }

Page 14: Win api module_1.2

14

Вікна Вікно - це прямокутна ділянка екрану, в якому додаток

відображає інформацію і отримує реакцію від користувача.

Andrey Gladky [email protected]

Page 15: Win api module_1.2

15

Вікна. Дескриптор вікна Одним з найважливіших понять в Windows-програмуванні є

поняття об'єктного дескриптора (handle). У Windows всі об'єкти - кисті, растри, покажчики миші, контексти пристроїв, вікна, екземпляри программ- ідентифікуються 32-розрядним (в Winl6 - 16-розрядним) цілим числом, яке називається дескриптором.

Дескриптор вікна.

Після створення вікна, функція, що його створює повертає дескриптор вікна (window handle), який унікально ідентифікує вікно. Дескриптор вікна має тип даних HWND; прикладна програма повинна використовувати цей тип при оголошенні змінної, яка містить в собі дескриптор вікна. Прикладна програма використовує цей дескриптор в інших функціях, щоб направити їх дії на це вікно.

Andrey Gladky [email protected]

Page 16: Win api module_1.2

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 [email protected]

Page 17: Win api module_1.2

17

Вікна. Стилі вікнаСтиль Опис

WS_MAXIMIZEBOX   Створює вікно з кнопкою розгортання вікна.WS_MINIMIZE  Створює вікно мінімального розміру.WS_ICONIC   Створює спочатку згорнуте вікноWS_MINIMIZEBOX  Створює вікно з кнопкою згортання.WS_OVERLAPPED   Створює перекриваюче вікноWS_SYSMENU   Створює вікно з кнопкою системного менюWS_TABSTOP  Визначає елементи управління, перехід до яких

може бути виконаний по клавіші TAB.WS_VISIBLE   Створює спочатку невідображене вікно.WS_VSCROLL   Створює вікно з горизонтальною смугою прокрутки.WS_THICKFRAME   Створює вікно з рамкою, використовуваної для

зміни

Andrey Gladky [email protected]

Page 18: Win api module_1.2

18

Вікна. Віконний клас

Andrey Gladky [email protected]

Віконний клас (window class), або клас вікна - це структура, що визначає основні характеристики вікна. До них відносяться стиль вікна і пов'язані з вікном ресурси, такі як піктограма, курсор, меню і кисть для зафарбовування фону. Крім того, одне з полів структури містить адресу віконної процедури, призначеної для обробки повідомлень, одержуваних будь-яким вікном даного класу.

Посилання на віконний клас передається функції CreateWindow, призначеної для створення вікна.

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

Page 19: Win api module_1.2

19

Вікна. Віконна процедура

Andrey Gladky [email protected]

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

Аналогічні системні класи є і для інших елементів управління, таких як, наприклад, списки і поля редагування. У сукупності ці класи називаються стандартними віконними класами.

Windows містить стандартний віконний клас також і для діалогових вікон, що грають важливу роль в графічному інтерфейсі користувача.