Win32 API Zelfstudie
Aan de slag met Win32 API
Zoeken…
Opmerkingen
WinAPI (ook bekend als Win32; officieel de Microsoft Windows API genoemd) is een applicatie-programmeerinterface geschreven in C door Microsoft om toegang tot Windows-functies mogelijk te maken. De belangrijkste componenten van de WinAPI zijn:
- WinBase: de kernelfuncties, CreateFile, CreateProcess, enz
- WinUser: de GUI-functies, CreateWindow, RegisterClass, enz
- WinGDI: de grafische functies, Ellipse, SelectObject, enz
- Algemene bedieningselementen: standaardbesturingselementen, lijstweergaven, schuifregelaars, enz
Zie ook:
- Windows API-index op MSDN.
versies
Versies van de API zijn gekoppeld aan de versie van het besturingssysteem. MSDN-documentatie specificeert het minimaal ondersteunde besturingssysteem voor elke functie in de API.
Hallo Wereld
Microsoft Windows-applicaties worden meestal geschreven als een console-applicatie of een window-applicatie (er zijn andere soorten zoals services en plug-ins). Het verschil voor de programmeur is het verschil in de interface voor het hoofdingangspunt voor de toepassingsbron die door de programmeur wordt geleverd.
Wanneer een C- of C ++ -toepassing start, is het uitvoerbare invoerpunt dat wordt gebruikt door de uitvoerbare lader de Runtime die wordt geleverd door de compiler. De uitvoerbare lader leest het uitvoerbare bestand in, voert een eventuele correctie op de benodigde afbeelding uit en roept vervolgens het uitvoerbare invoerpunt op dat voor een C- of C ++ -programma de door de compiler geleverde Runtime is.
Het uitvoerbare invoerpunt dat door de loader wordt aangeroepen, is niet het belangrijkste invoerpunt dat wordt geleverd door de applicatieprogrammeur, maar is in plaats daarvan de Runtime die wordt geleverd door de compiler en de linker die het uitvoerbare bestand maakt. De Runtime stelt de omgeving in voor de toepassing en roept vervolgens het belangrijkste toegangspunt op dat door de programmeur wordt geleverd.
Een Windows-consoletoepassing kan verschillende, enigszins verschillende interfaces hebben voor het belangrijkste toegangspunt van de programmeur. Het verschil tussen deze is of het hoofdinvoerpunt de traditionele int main (int argc, char *argv[])
of dat het de Windows-specifieke versie van int _tmain(int argc, _TCHAR* argv[])
die zorgt voor een brede tekens in de toepassingsparameters. Als u een Windows Win32-consoletoepassingsproject genereert met Visual Studio, is de gegenereerde bron de Windows-specifieke versie.
Een Windows-venster (GUI) -applicatie heeft een andere interface voor het belangrijkste toegangspunt van de programmeur. Dit hoofdinvoerpunt van de programmeur heeft een complexere interface omdat de Runtime een GUI-omgeving instelt en aanvullende informatie biedt samen met de toepassingsparameters.
In dit voorbeeld wordt de interface van het Windows-venster (GUI) uitgelegd. Om deze onderwerpen te verkennen, moet u:
- een IDE met compiler (bij voorkeur Visual Studio)
- C kennis
Maak een leeg Win32 Windows-project (GUI, geen console) met behulp van de IDE. De projectinstellingen moeten worden ingesteld voor een venstertoepassing (geen consoletoepassing) zodat de linker kan koppelen met de juiste runtime. Maak een main.c
bestand dat u aan het project toevoegt en typ vervolgens de volgende code:
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow)
{
return MessageBox(NULL, "hello, world", "caption", 0);
}
Dit is ons Win32 "Hallo wereld" programma. De eerste stap is het opnemen van de Windows-koptekstbestanden. De belangrijkste koptekst voor Windows is windows.h
, maar er zijn er nog meer.
De WinMain
verschilt van een standaard int main()
gebruikt met een consoletoepassing. Er worden meer parameters in de interface gebruikt en nog belangrijker: het belangrijkste toegangspunt voor een vensterapplicatie gebruikt een aanroepconventie die verschilt van standaard C / C ++.
De kwalificatie APIENTRY
geeft de APIENTRY
aan. Dit is de volgorde waarin argumenten op de stapel worden gepusht † . Standaard is de __cdecl
de standaard C-conventie die wordt aangegeven met __cdecl
. Microsoft gebruikt echter een ander type __stdcall
, de PASCAL-conventie, voor de Windows API-functies die wordt aangegeven door de kwalificatie __stdcall
. APIENTRY
is een gedefinieerde naam voor __stdcall
in een van de header-bestanden van windows.h
(zie ook Wat is __stdcall? ).
De volgende argumenten voor WinMain
zijn als volgt:
- hInst: de exemplaarhandle
- hInstPrev: de vorige exemplaarhandle. Niet langer gebruikt.
- cmdline: opdrachtregelargumenten (zie WinMain (of wWinMain) -argumenten doorgeven aan normale hoofd )
- cmdshow: geeft aan of een venster moet worden weergegeven.
We gebruiken deze argumenten nog niet.
Binnen in WinMain()
bevindt zich een aanroep naar MessageBox()
, waarin een eenvoudig dialoogvenster wordt weergegeven met een bericht, een berichtenvak. Het eerste argument is de greep naar het eigenaarvenster. Aangezien we nog geen eigen venster hebben, geeft u NULL
. Het tweede argument is de hoofdtekst. Het derde argument is het bijschrift en het vierde argument bevat de vlaggen. Wanneer 0 wordt gepasseerd, wordt een standaardberichtvenster weergegeven. Het onderstaande diagram ontleedt het dialoogvenster van het berichtvenster.
Goede links:
† Alleen op 32-bits systemen. Andere architecturen hebben verschillende roepconventies.