Основные возможности WinAPI
Windows API (от англ. Application Programming Interface – интерфейс программирования приложений) – это библиотека, позволяющая создавать классические приложения для операционной системы Windows, которая написана на языке С и представляет собой коллекцию разнообразных функций, структур и констант.
Вся эта коллекция содержится в библиотеке windows.h, и данная библиотека является базовой в освоении программирования Windows Forms, связанного с созданием различных функциональных форм.
Все языки программирования, способные вызывать такие функции и поддерживающие такие типы данных в программах, исполняемых в среде Windows, позволяют работать с интерфейсом API. К ним относятся, например, C++, Pascal и Visual Basic.
С помощью WinAPI можно создавать различные приложения в виде окон, организовывать взаимодействие с ними при помощи создаваемых диалоговых окон. Например, это могут быть какие-нибудь компьютерные игры.
Итак, все программы, написанные для операционной системы Windows, используют специальный интерфейс программирования WinAPI, и Windows API обладает практически безграничными возможностями по работе с операционной системой.
Типы данных WinAPI С++
В библиотеке WinAPI определено множество типов данных, подобно языкам C и С++ (int, float, char и другие). Все их можно разделить на несколько категорий:
- основные;
- дескрипторные;
- строковые;
- вспомогательные.
Далее рассмотрим каждый из этих видов подробнее.
К основным типам данных относятся:
- BOOL – булевский тип данных, аналогичный bool. Он имеет два значения: NULL или 1;
- BYTE – байт (восьмибитное беззнаковое целое число), аналогичное типу unsigned char;
- DWORD – 32-битное беззнаковое целое число, аналогичное unsigned long int и UINT;
- INT – 32-битное целое, аналогичное типу long int;
- LONG – 32-битное целое – аналог того же long int;
- NULL – нулевой указатель, объявляемый следующим образом: void * NULL=0;
- UINT – 32-битное беззнаковое целое. Аналоги: unsigned long int, DWORD.
Дескриптор – это идентификатор какого-либо объекта (курсора мыши, шрифта, кисти и т.д.). Дескрипторные типы нужны для того, чтобы организовывать программное взаимодействие с этими идентификаторами. Понятно, что для разных типов объектов существуют свои определённые дескрипторы. Они позволяют во время работы приложения вызывать у компьютера какие-либо реакции. Дескрипторные функции определяются при помощи специальных функций, таких как CreateProcess(), ShowWindow() и т. д. или как возвращаемое значение некоторых функций.
Например, для получения дескриптора для устройства ввода/вывода используется следующая конструкция:
HANDLE h = GetStdHandle(DWORD nStdHandle);
В этой функции мы получили дескриптор (HANDLE h) для считывания входящих и исходящих потоков (std_in и std_out).
Для удобства в WinAPI для обозначения дескрипторных типов данных в их названиях используется первая буква H – от слова handle.
Если говорить о строковых переменных, то важным становится вопрос о кодировке текстовой информации. В операционной системе Windows применяется два вида символьных кодировок: ANSI и UNICODE. Причём однобайтные символы относятся к кодировке ANSI, а двухбайтные – к UNICODE. В зависимости от того, подключён ли юникод в свойствах проекта или нет, в WinAPI есть возможность использования двух видов строк UNICODE или TCHAR (для кодировки ANSI). Различия в их объявлении следующие: либо wchar_t str[10]; либо char str[10]; (создаём строку из 10 элементов в кодировке UNICODE и ANSI, соответственно).
Во всех названиях строковых типов данных используется специальный префикс LP – от словосочетания long pointer (то есть это некоторый указатель).
Вспомогательные типы данных используются в различных функциях библиотеки WinAPI. Рассмотрим некоторые из этих параметров. Например те, которые используются при работе с функцией обратного вызова некоторого действия с окном программы: LRESULT CALLBACK ИмяФункции(HWND hWnd, UINT uMSg, WPARAM wParam, LPARAM lParam);
Здесь используются следующие типы данных:
- LRESULT – значение, возвращаемое оконной процедурой (имеет тип long);
- LPARAM – тип для описания lParam (long parameter);
- WPARAM – тип для описания wParam (word parameter).
Заметим, что WinAPI переопределяет множество типов данных, стандартных для языка C++. Во многом это связано с платформой для которой будет создаваться приложение. Например, тип LRESULT, если приложение скомпилировать для x86, будет являться типом long, но при компиляции для x64, LRESULT окажется типа int64.
Создание WinAPI окна с сообщением
На рисунке представлен код данной программы на языке WinAPI C++:
Рисунок 1. Код программы. Автор24 — интернет-биржа студенческих работ
Здесь вначале добавляется статичная библиотека WinAPI, которая содержит определения различных функций, а затем подключается заголовочный файл с объявлениями этих функций, структур и констант. Библиотека user32.lib содержит все основные возможности Windows по работе с окнами и обработке различных событий.
Далее объявляется функция обратного вызова (callback), которая будет вызываться, когда приложение будет получать какое-либо сообщение от операционной системы.
Также важной является функция WinMain – это точка входа в программу, она вызывается операционной системой.