Win32 API учебник
Начало работы с API Win32
Поиск…
замечания
WinAPI (также известный как Win32, официально называемый Microsoft Windows API) - это интерфейс прикладного программирования, написанный на C Microsoft, чтобы разрешить доступ к функциям Windows. Основными компонентами WinAPI являются:
- WinBase: функции ядра, CreateFile, CreateProcess и т. Д.
- WinUser: функции GUI, CreateWindow, RegisterClass и т. Д.
- WinGDI: графические функции, Ellipse, SelectObject и т. Д.
- Общие элементы управления: стандартные элементы управления, списки, ползунки и т. Д.
Смотрите также:
- Индекс API Windows на MSDN.
Версии
Версии API привязаны к версии операционной системы. Документация MSDN указывает минимальную поддерживаемую операционную систему для каждой функции API.
Привет, мир
Приложения Microsoft Windows обычно записываются как консольное приложение или оконное приложение (существуют другие типы, такие как службы и плагины). Разница для программиста - разница в интерфейсе для основной точки входа для источника приложения, предоставляемого программистом.
Когда запускается приложение C или C ++, исполняемая точка входа, используемая исполняемым загрузчиком, представляет собой время выполнения, предоставляемое компилятором. Исполняемый загрузчик читает в исполняемом файле, выполняет любое исправление необходимого изображения и затем вызывает исполняемую точку входа, которая для C или C ++ - это время выполнения, предоставляемое компилятором.
Исходная точка входа, вызываемая загрузчиком, не является основной точкой входа, предоставляемой программным программистом, но вместо этого выполняется время выполнения, предоставляемое компилятором и компоновщиком, который создает исполняемый файл. Runtime устанавливает среду для приложения, а затем вызывает основную точку входа, предоставленную программистом.
Консольное приложение Windows может иметь несколько несколько разных интерфейсов для основной точки входа, предоставляемой программистом. Разница между ними заключается в том, является ли главная точка входа традиционной int main (int argc, char *argv[])
или если это конкретная версия int _tmain(int argc, _TCHAR* argv[])
которая обеспечивает широкий символов в параметрах приложения. Если вы создаете консольный прикладной проект Windows Win32 с использованием Visual Studio, созданный источник будет версией Windows.
Приложение Windows (GUI) имеет другой интерфейс для основной точки входа, предоставляемой программистом. Эта основная точка входа, предоставляемая программистом, имеет более сложный интерфейс, поскольку среда выполнения создает среду GUI и предоставляет дополнительную информацию вместе с параметрами приложения.
В этом примере объясняется интерфейс основной точки входа Windows (GUI). Чтобы изучить эти темы, вы должны:
- IDE с компилятором (желательно Visual Studio)
- Знание
Создайте пустой проект Win32 (графический интерфейс, а не консоль), используя IDE. Параметры проекта должны быть установлены для оконного приложения (а не консольного приложения), чтобы компоновщик связывался с правильным временем выполнения. Создайте файл main.c
добавив его в проект, а затем введите следующий код:
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow)
{
return MessageBox(NULL, "hello, world", "caption", 0);
}
Это наша программа Win32 «Hello, world». Первым шагом будет включение файлов заголовков Windows. Главным заголовком для всех окон является windows.h
, но есть и другие.
WinMain
отличается от стандартного int main()
используемого с консольным приложением. В интерфейсе больше параметров, и, что более важно, главная точка входа для оконного приложения использует соглашение о вызове, отличное от стандартного C / C ++.
Спецификатор APIENTRY
указывает соглашение о вызове, которое является порядком, в котором аргументы помещаются в стек † . По умолчанию соглашение о вызове является стандартным соглашением C, обозначенным __cdecl
. Однако Microsoft использует другой тип соглашения о вызове, соглашение PASCAL, для функций Windows API, которое обозначается квалификатором __stdcall
. APIENTRY
- это определенное имя для __stdcall
в одном из файлов заголовков, включенных windows.h
(см. Также « Что такое __stdcall?» ).
Следующие аргументы WinMain
заключаются в следующем:
- hInst: дескриптор экземпляра
- hInstPrev: предыдущий дескриптор экземпляра. Больше не используется.
- cmdline: аргументы командной строки (см. аргументы Pass WinMain (или wWinMain) для обычного основного )
- cmdshow: указывает, должно ли отображаться окно.
Мы пока не используем ни один из этих аргументов.
Внутри WinMain()
- вызов MessageBox()
, который отображает простой диалог с сообщением, поле сообщения. Первый аргумент - это дескриптор окна владельца. Поскольку у нас еще нет собственного окна, пропустите NULL
. Второй аргумент - основной текст. Третий аргумент - это заголовок, а четвертый аргумент содержит флаги. Когда 0 передано, отображается окно сообщения по умолчанию. Диаграмма ниже раскрывает диалоговое окно окна сообщения.
Хорошие ссылки:
† Только для 32-битных систем. Другие архитектуры имеют разные соглашения о вызовах.