Win32 API Handledning
Komma igång med Win32 API
Sök…
Anmärkningar
WinAPI (även känd som Win32; officiellt kallad Microsoft Windows API) är ett applikationsprogrammeringsgränssnitt skrivet i C av Microsoft för att ge åtkomst till Windows-funktioner. Huvudkomponenterna i WinAPI är:
- WinBase: Kärnfunktionerna, CreateFile, CreateProcess osv
- WinUser: GUI-funktionerna, CreateWindow, RegisterClass, etc.
- WinGDI: Grafikfunktionerna, Ellipse, SelectObject osv
- Vanliga kontroller: Standardkontroller, listvyer, reglage osv
Se även:
- Windows API-index på MSDN.
versioner
Versioner av API är kopplade till operativsystemversionen. MSDN-dokumentation specificerar det minsta stödda operativsystemet för varje funktion i API: n.
Hej världen
Microsoft Windows-applikationer skrivs vanligtvis antingen som en konsolapplikation eller som ett fönstret program (det finns andra typer som tjänster och plug-ins). Skillnaden för programmeraren är skillnaden i gränssnittet för huvudinmatningspunkten för applikationskällan som tillhandahålls av programmeraren.
När en C- eller C ++ -applikation startar är den körbara startpunkten som används av den körbara lastaren Runtime som tillhandahålls av kompilatorn. Den körbara laddaren läser i den körbara, utför eventuell fixering av den bild som behövs och åberopar sedan den körbara startpunkten som för ett C- eller C ++ -program är Runtime som tillhandahålls av kompilatorn.
Den körbara startpunkten som åberopas av laddaren är inte den huvudsakliga ingångspunkten som tillhandahålls av applikationsprogrammeraren utan är istället den Runtime som tillhandahålls av kompilatorn och länken som skapar den körbara. Runtime skapar miljön för applikationen och anropar sedan huvudinmatningspunkten som tillhandahålls av programmeraren.
En Windows-konsolapplikation kan ha flera lite olika gränssnitt för programmerarens huvudinmatningspunkt. Skillnaden mellan dessa är om huvudinmatningspunkten är den traditionella int main (int argc, char *argv[])
eller om det är den Windows specifika versionen av int _tmain(int argc, _TCHAR* argv[])
som ger bred tecken i applikationsparametrarna. Om du genererar ett Windows Win32-konsolapplikationsprojekt med Visual Studio är den källor som genereras den Windows-specifika versionen.
En Windows-fönsterapplikation (GUI) har ett annat gränssnitt för huvudinmatningspunkten som tillhandahålls av programmeraren. Denna huvudinmatningspunkt som tillhandahålls av programmeraren har ett mer komplext gränssnitt eftersom Runtime skapar en GUI-miljö och ger ytterligare information tillsammans med applikationsparametrarna.
I det här exemplet förklaras Windows-gränssnittets (GUI) huvudinmatningsgränssnitt. För att utforska det här ämnet bör du ha:
- en IDE med kompilator (helst Visual Studio)
- C kunskap
Skapa ett tomt Win32-fönster (GUI, inte konsol) -projekt med IDE. Projektinställningarna måste ställas in för en fönsterapplikation (inte en konsolapplikation) för att länken ska kunna länka till rätt körtid. Skapa en main.c
fil som lägger till den i projektet och skriv sedan följande kod:
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow)
{
return MessageBox(NULL, "hello, world", "caption", 0);
}
Detta är vårt Win32 "Hej, värld" -program. Det första steget är att inkludera Windows-huvudfilerna. Huvudrubriken för alla Windows är windows.h
, men det finns andra.
WinMain
skiljer sig från en standard int main()
används med en konsolapplikation. Det finns fler parametrar som används i gränssnittet och viktigare är att huvudinmatningspunkten för ett fönsterapplikation använder en samtalskonvention som skiljer sig från standard C / C ++.
APIENTRY
indikerar APIENTRY
, som är i den ordning som argument skjuts på stacken † . Som standard är __cdecl
standard C-konventionen indikerad av __cdecl
. Microsoft använder dock en annan typ av samtalskonvention, PASCAL-konventionen, för Windows API-funktioner som indikeras av __stdcall
kval. APIENTRY
är ett definierat namn för __stdcall
i en av de headerfiler som ingår i windows.h
(se även Vad är __stdcall? ).
Nästa argument för WinMain
är följande:
- hInst: Instanshandtaget
- hInstPrev: Det föregående instanshandtaget. Används inte längre.
- cmdline: Kommandoradsargument (se Skicka WinMain (eller wWinMain) -argument till normal huvud )
- cmdshow: anger om ett fönster ska visas.
Vi använder inga av dessa argument ännu.
Inuti WinMain()
, är ett samtal till MessageBox()
, som visar en enkel dialog med ett meddelande, en meddelanderuta. Det första argumentet är handtaget till ägarfönstret. Eftersom vi inte har vårt eget fönster än, passera NULL
. Det andra argumentet är huvudtexten. Det tredje argumentet är bildtexten, och det fjärde argumentet innehåller flaggorna. När 0 skickas visas en standardmeddelanderuta. Diagrammet nedan dissekerar meddelandedialogrutan.
Bra länkar:
† Endast på 32-bitarssystem. Andra arkitekturer har olika anropskonventioner.