Введення в api-програмування

Введення в API-програмування

API це програмний інтерфейс програми. Іншими словами, це ті можливості, які надає операційна система Windows для використання прикладними програмами. Системні функції, які надає Windows програмісту, називаються ще функціями API. Програмування з використанням тільки цих функцій називається API-програмуванням. У даній статті ми дамо досить широке запровадження в API-програми.

Структура API-програм

Центральним поняттям програмування в середовищі Windows є повідомлення. Система посилає повідомлення з додатком, а то, в свою чергу, повинно правильно відреагувати на нього. Одержувачами повідомлень є функції вікон програми, на програмування яких і йде велика частина часу при розробки API-додатків.

Класична структура API-програми визначається чотирма компонентами: ініціалізація; цикл очікування, або цикл обробки повідомлень; функція головного вікна; інші функції. У найпростішому випадку останній компонент може бути відсутнім. Два перших компонента розташований в функції WinMain. Отже, все по порядку.

функція WinMain

Функція WinMain викликається системою, в яку передаються чотири параметри:

  • hInstance - дискриптор текушего екземпляра додатка.
  • hPrevInctance - завжди дорівнює NULL.
  • lpCmdLine - покажчик на командний рядок, що запускається.
  • nCmdShow - спосіб візуалізації вікна.

ініціалізація

Якщо коротко, то тут виробляється реєстрація класу вікон, його створення і виведення на Ікра. Реєстрація классв вікон здійснюється функцією:

Нехай вас не бентежить тип ATOM, для нас це просто int. Єдиний параметр функції покажчик на структуру WNDCLASS. Після того як клас буде зарєестрованих, вікно з даного класу може бути створено функцією CreateWindow. Розберемо тепер структуру WNDCLASS:

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

Перерахуємо деякі типові значення членів структури:

  • Стилі класу вікон. Стиль вікна визначається комбінацією декількох зумовлених констант. Досить часто він пологается нулю, що означає "стиль за замовчуванням".
  • Дискриптор іконки вікна. Визначається за допомогою функції LoadIcon. Першим параметром цієї функції є дискриптор додатки, втори - рядок, що визначає ім'я іконки в ресурсах. Для того щоб щоб задати одну зі стандартних іконок, перший параметр повинен мати значення NULL, а другий значення однієї з наступних констант: IDI_APLICATION - стандартнаю іконка програми; IDI_ASTERISK - іконка "інформація"; IDI_EXCLAMATION - "знак оклику"; IDI_HAND - "знак Стоп"; IDI_QUESTION - "знак питання".
  • Дискриптор курсора. Для визначення курсору використовується API-функція LoadCursor. Функція схожа на функцію LoadIcon.
  • Ім'я класу. Назва класу - це просто рядок, яка потім використовується при створенні вікна.

Зі значеннями інших членів структури ми познайомимося пізніше.
Вікно створюється функцією CreteWindow. Ось прототип цієї функції:

Цю функцію ми розберемо пізніше. Головне тут те, що функція повертає дискриптор створеного вікна, при помилці - 0.
Для того щоб коректно відобразити вікно на екрані, слід виконати ще дві функції.

BOOL ShowWindow (HWND hWnd, int nCmdShow) - ця функція відображає вікно на екрані. Перший параметр - дискриптор вікна, другий - режим відображення. Як цього параметра зазвичай використовують параметр nWinMode функції WinMain. Можна також використовувати зумовлені константи:

  • SW_HIDE - приховати вікно
  • SW_MAXIMIZE - максимізувати вікно
  • SW_MINIMIZE - мінімізувати вікно і активувати саме верхнє вікно
  • SW_RESTORE - відобразити вікно в нормальному стані
  • SW_SHOW - активізувати окнос поточними розмінною
  • SW_SHOWMAXIMIZED - максимізувати вікно і зробити його активним
  • SW_SHOWMINIMIZED - мінімізувати вікно
  • SW_SHOWNA - відобразити вікно в його поточному стані. При цьому активування вікно залишити активним.
  • SW_SHOWNOACTIVATE - відновлює вікно в його Попереднє стані. При цьому активне вікно залишається активним.
  • SW_SHOWNORMAL - активізувати і встановити вікно в колишніх розмірах.

BOOL UpdateWindow (HWND hWnd) - виклик даної функції приводить до негайної перемальовуванні вікна і посилці функції вікна повідомлення WM_PAINT.

Цикл обробки повідомлень

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

У циклі повідомлення присутній три функції. Ці функції є там завжди, але крім них в циклі можуть бути і інші. Функція GetMessage вибирає з черги повідомлень додатку черговий додаток. замість цієї функції використовують так само функції PostMessage і PeekMessage.
У всіх трьох функціях присутній покажчик на рядок MSG. Розберемо її:

  • hwnd - дискриптор вікна.
  • message - код повідомлення.
  • wParam - додатковий параметр.
  • lParam - додатковий параметр.
  • time - час посилки повідомлення.
  • pt - положення курсору миші.

Прототип функції MessageBox.

Перший параметр функції - покажчик на рядок MSG, куди і буде поміщена отримана інформація. Другим параметром є дискриптор вікна, якому призначено повідомлення. Якщо параметр дорівнює NULL, то "відштовхуються" всі повідомлення, одержувані додатком. Два останніх параметра визначають діапазон повідомлень. Для того щоб отримувати повідомлення з усього діапазону, ці параметри повинні бути рівні 0.

Функція TransleteMessage преабразует повідомлення WM_KEYDOWN і WM_KEYUP в WM_CHAR. Функція DispatchMessage просто переправляє повідомлення віконної процедури.

віконна функція

Це ще один компонент відповідає за обробку повідомлень вікна. Ця функція викликається системою і має чотири параметри, які збігаються з першими четирбмя членами структури MSG. Мистецтво API-програмування полягає в основному в написанні віконних функцій. Ось приклад віконної функції:

Середовищі Visual C + ++ надає деяку допомогу бажаючим написати API-програми. Ви можете скористатися однією з двох можливостей. У списку проектів вибираємо Win32 Project і далі слідуємо одним з двох шляхів: скасувати прапорець Empty project чи ні. Якщо не відзначати прапорець, то система створить найпростіше віконне додаток з мінімальною функціональністю, що дозволяє, однак, розвивати ваш проект і створювати додатки будь-якого ступеня складності.

Тож почнемо. Вибираємо шлях, простий проект. Відкриємо вікно Solution Explorer. Як і слід було очікувати, проект порожній. Клацніть правою кнопкою мищі по рядку проекту І обираючи пункт Add new Item, тип файлу - CPP і введемо ім'я api1.cpp. Тепер ми свами можемо скористатися тим що з вами іже дізналися. Як сидите ми обощлісь мінімальною кількістю файлів. Пожключаемий файл windows.h містить визначення всіх API-функцій, а також необхідних для їх використання констант і типів даних. Ось код цієї програми:

Схожі статті