Win32 API Samouczek
Rozpoczęcie pracy z Win32 API
Szukaj…
Uwagi
WinAPI (znany również jako Win32; oficjalnie nazywany Microsoft Windows API) to interfejs programowania aplikacji napisany w C przez Microsoft, aby umożliwić dostęp do funkcji Windows. Głównymi składnikami WinAPI są:
- WinBase: Funkcje jądra, CreateFile, CreateProcess itp
- WinUser: funkcje GUI, CreateWindow, RegisterClass itp
- WinGDI: Funkcje graficzne, Elipsa, SelectObject itp
- Wspólne elementy sterujące: standardowe elementy sterujące, widoki list, suwaki itp
Zobacz też:
- Indeks Windows API na MSDN.
Wersje
Wersje interfejsu API są powiązane z wersją systemu operacyjnego. Dokumentacja MSDN określa minimalny obsługiwany system operacyjny dla każdej funkcji interfejsu API.
Witaj świecie
Aplikacje Microsoft Windows są zwykle pisane jako aplikacje konsolowe lub aplikacje okienkowe (istnieją inne typy, takie jak usługi i wtyczki). Różnicą dla programisty jest różnica w interfejsie dla głównego punktu wejścia dla źródła aplikacji dostarczonego przez programistę.
Gdy uruchamia się aplikacja C lub C ++, punktem wejścia wykonywalnym używanym przez program ładujący jest środowisko wykonawcze dostarczane przez kompilator. Program ładujący odczytuje plik wykonywalny, wykonuje dowolną naprawę wymaganego obrazu, a następnie wywołuje punkt wejścia wykonywalnego, którym dla programu C lub C ++ jest środowisko wykonawcze dostarczone przez kompilator.
Wykonalny punkt wejścia wywołany przez moduł ładujący nie jest głównym punktem wejścia podanym przez programistę aplikacji, ale jest środowiskiem wykonawczym dostarczonym przez kompilator i konsolidator, który tworzy plik wykonywalny. Środowisko wykonawcze konfiguruje środowisko dla aplikacji, a następnie wywołuje główny punkt wejścia podany przez programistę.
Aplikacja konsoli Windows może mieć kilka nieco różnych interfejsów dla głównego punktu wejścia dostarczonego przez programistę. Różnica między nimi polega na tym, czy głównym punktem wejścia jest tradycyjny int main (int argc, char *argv[])
czy też jest to wersja int _tmain(int argc, _TCHAR* argv[])
dla systemu Windows int _tmain(int argc, _TCHAR* argv[])
która zapewnia szeroki znaki w parametrach aplikacji. Jeśli wygenerujesz projekt konsoli Windows Win32 za pomocą programu Visual Studio, źródłem będzie wersja specyficzna dla systemu Windows.
Aplikacja okna systemu Windows (GUI) ma inny interfejs dla głównego punktu wejścia dostarczonego przez programistę. Ten główny punkt wejścia dostarczony przez programistę ma bardziej złożony interfejs, ponieważ środowisko wykonawcze konfiguruje środowisko GUI i zapewnia dodatkowe informacje wraz z parametrami aplikacji.
W tym przykładzie wyjaśniono interfejs głównego punktu wejścia okna GUI. Aby poznać te tematy, powinieneś:
- IDE z kompilatorem (najlepiej Visual Studio)
- Znajomość C.
Utwórz pusty projekt systemu Windows (GUI, nie konsoli) przy użyciu IDE. Ustawienia projektu muszą być ustawione dla aplikacji okienkowej (nie aplikacji konsolowej), aby linker mógł połączyć się z poprawnym środowiskiem wykonawczym. Utwórz plik main.c
, dodając go do projektu, a następnie wpisz następujący kod:
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow)
{
return MessageBox(NULL, "hello, world", "caption", 0);
}
To jest nasz program Win32 „Hello, world”. Pierwszym krokiem jest dołączenie plików nagłówkowych systemu Windows. Główny nagłówek wszystkich systemów Windows to windows.h
, ale są też inne.
WinMain
różni się od standardowej int main()
używanej z aplikacją konsolową. Interfejs zawiera więcej parametrów, a co ważniejsze, główny punkt wejścia dla aplikacji okien korzysta z konwencji wywoływania innej niż standardowe C / C ++.
Kwalifikator APIENTRY
wskazuje konwencję wywoływania, czyli kolejność, w jakiej argumenty są wypychane na stos † . Domyślnie konwencja wywoływania jest standardową konwencją C oznaczoną przez __cdecl
. Jednak Microsoft używa innego typu konwencji wywoływania, konwencji PASCAL, do funkcji Windows API, która jest wskazana przez kwalifikator __stdcall
. APIENTRY
to zdefiniowana nazwa dla __stdcall
w jednym z plików nagłówkowych zawartych w windows.h
(zobacz także Co to jest __stdcall? ).
Kolejne argumenty dla WinMain
są następujące:
- hInst: uchwyt instancji
- hInstPrev: uchwyt poprzedniej instancji. Nieużywany.
- cmdline: Argumenty wiersza poleceń (zobacz Przekazywanie argumentów WinMain (lub wWinMain) do normalnego głównego )
- cmdshow: wskazuje, czy powinno zostać wyświetlone okno.
Nie używamy jeszcze żadnego z tych argumentów.
Wewnątrz WinMain()
znajduje się wywołanie MessageBox()
, które wyświetla proste okno dialogowe z komunikatem, okno komunikatu. Pierwszym argumentem jest uchwyt do okna właściciela. Ponieważ nie mamy jeszcze własnego okna, przekaż NULL
. Drugi argument to tekst podstawowy. Trzeci argument to podpis, a czwarty argument zawiera flagi. Po podaniu 0 wyświetlane jest domyślne okno komunikatu. Poniższy schemat przedstawia okno dialogowe.
Dobre linki:
† Tylko w systemach 32-bitowych. Inne architektury mają różne konwencje wywoływania.