Wie in jedem anständigen Tutorial will ich Ihnen die Besonderheiten eines Windowsprogrammes aufzeigen, indem ich Ihnen ein kleines Hello World Programm vorstelle.
#include <windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MessageBox(NULL, TEXT("Hello World"), TEXT("Hello World - Programm"), 0); return 0; }
Kompilieren Sie den Code und starten Sie das Programm. Sie werden folgendes Fenster sehen:
Viele Ihrer Windowsprogramme werden mit der Zeile #include <windows.h> beginnen. Die Includedatei bindet ihrerseits verschiedene andere Headerdateien ein, auf die ich aber hier nicht eingehen werde. Nur so viel: In den Headerdateien ist alles definiert, was Sie zum Schreiben von Windows-Anwendungen benötigen.
Jeder C-Programmierer weiß, dass ein C-Programm eine main()-Funktion haben muss, als Einstiegspunkt für das Programm. Windows-Anwendungen haben keine main()-Funktion sondern vielmehr WinMain(), welche im Prinzip die gleiche Aufgabe hat, wie main(). Sie ist der Einstiegspunkts des Programmes. Die hat folgende Parameter:
HINSTANCE hInstance ist das Handle zur Instanz des Programms. Ein Handle ist eine 32bit lange Identifikationsnummer, die das Programm von Windows bekommt. Mithilfe eines Handles ordnet Windows einem Objekt Speicher zu. hPrevInstance ist aus den 16bit Windows übrig geblieben. Es gab an, welches Handle die Vorgängerinstanz des Programms hatte. Mithilfe des Handles der Vorgängerinstanz konnte das Programm das Menü etc. der vorher gestarteten Instanz des Programms verwenden. So wurde RAM-Speicherplatz gespart, was allerdings heute relativ sinnlos ist. hPrevInstance ist auf einem 32bit Windows immer 0. PSTR szCmdLine ist ein Pointer zu einem String. szCmdLine speichert die dem Programm übergebenen Konsolenparameter. Wenn zum Beispiel in der Konsole aufgerufen wurde: ffmpeg.exe -i „video.avi“ dann enthält szCmdLine -i „video.avi“. int iCmdShow gibt an ob das Programm sichtbar gestartet wird oder nicht.
Die Funktion MessageBox zeigt eine Meldung auf dem Bildschirm an. Sie benötigt mehrere Parameter: Der erste ist der Handle des Fensters, zu dem die MessageBox gehört und was solange lahm gelegt wird, bis die MessageBox geschlossen ist. Der zweite Parameter ist der Text der auf der MessageBox angezeigt werden soll. Der dritte Parameter gibt den Text in der Titelleiste an und der vierte gibt an, welches Symbol verwendet werden soll. In der winuser.h, eine der Headerdateien die über windows.h eingebunden wird, sind folgende Konstanten für den vierten Parameter definiert:
Konstante | Bedeutung |
---|---|
Buttons | |
MB_OK | Ein OK-Button |
MB_OKCANCEL | Ein OK-Button und ein Abbrechen-Button |
MB_ABORTRETRYIGNORE | Abbrechen, Wiederholen, Ignorieren-Buttons |
MB_YESNOCANCEL | Ja, Nein, Abbrechen-Buttons |
MB_YESNO | Ja, Nein-Buttons |
MB_RETRYCANCEL | Wiederholen und Abbrechen-Buttons |
Standardbutton | |
MB_DEFBUTTON1 | Der erste Button ist aktiviert |
MB_DEFBUTTON2 | Der zweite Button ist aktiviert |
MB_DEFBUTTON3 | Der dritte Button ist aktiviert |
MB_DEFBUTTON4 | Der vierte Button ist aktiviert |
Symbole | |
MB_ICONHAND | Stopsymbol |
MB_ICONQUESTION | Fragezeichensymbol |
MB_ICONEXCLAMATION | Ausrufezeichensymbol |
MB_ICONASTERIK | Sternchensymbol |
Hilfeknopf | |
MB_HELP | Hilfeknopf |
Aus jeder der 4 Kategorien kann höchstens ein Element ausgewählt werden. Sie werden mithilfe des Operators | (bitweises OR) verknüpft.
TEXT ist ein Makro um eine Zeichenkette entweder als char (8bit, ANSI) oder als wchar_t (16bit, Unicode) anzugeben, je nachdem ob das Symbol UNICODE definiert wurde. Unicode hat mit 16 bit pro Zeichen einen Vortiel gegenüber ANSI in Sachen Internationalität, allerdings bedeuten 16 bit pro Zeichen den doppelten Speicherverbrauch.