DarkWinAPI by Darkleo.com
Das "Hallo World!" Programm
Was macht eigentlich ein echtes Windows-Programm aus? Natürlich: Fenster!
Bisher haben Sie Ihr C- oder C++ Programm mit der
Funktion main(...) als Einstiegspunkt begonnen.
Das ändert sich bei Windows-Programmen. Hier verwendet man die Einstiegsfunktion
WinMain(...).
Zur Verdeutlichung erstellen wir ein "minimales" Beispiel:
#include
<windows.h>
int
WINAPI WinMain(
HINSTANCE, HINSTANCE, LPSTR, int ) |
Die Header-Datei windows.h ist die Basis für die Windows-Programmierung. Öffnet man diese Header-Datei, dann findet man die eigene Bezeichnung "Master include file for Windows applications". Innerhalb dieser Datei findet man eine lange Liste weiterer eingebundener (includierter) Dateien. Schauen Sie doch einmal selbst hinein. Mit windows.h stellt uns MS VC++ die für Windows-Programme benötigten Daten und Funktionen zur Verfügung.
Infos aus MSDN zu WinMain(...):
int WINAPI WinMain
(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
);
hInstance:
Handle to the current instance of the application.
hPrevInstance:
Handle to the previous instance of the application.
For a Win32-based application, this parameter is always NULL.
lpCmdLine:
Pointer to a null-terminated string specifying the command line for the
application,
excluding the program name. To retrieve the entire command line, use the
GetCommandLine function.
nCmdShow:
Specifies how the window is to be shown.
Wenn Sie WINAPI weglassen, also folgendes schreiben:
#include <windows.h>
int WinMain(
HINSTANCE, HINSTANCE, PSTR, int ) |
erhalten Sie z.B. von VC++ die Warnung:'WinMain' : '__stdcall' muss angegeben werden.
Wenn Sie die Datei windef.h öffnen, finden Sie folgende Anweisung: #define WINAPI __stdcall
WINAPI ist ein
Bezeichner für __stdcall (Microsoft-spezifischer Aufruf an den Compiler
für Win32-API-Funktionen).
Es gibt aber auch z.B. FAR PASCAL, far pascal oder APIENTRY für
diesen Zweck.
Sie können also auch folgendes schreiben:
#include <windows.h>
int
__stdcall WinMain(
HINSTANCE, HINSTANCE, PSTR, int ) |
oder:
#include <windows.h>
int
APIENTRY WinMain(
HINSTANCE, HINSTANCE, PSTR, int ) |
oder:
#include <windows.h>
int
FAR PASCAL WinMain(
HINSTANCE, HINSTANCE, PSTR, int ) |
oder:
#include <windows.h>
int
far pascal WinMain(
HINSTANCE, HINSTANCE, PSTR, int ) |
Diese Vielfalt macht die Windows-Programmierung
bei Anfängern und Puristen so ungeheuer beliebt!
Ich möchte Sie hier nicht verwirren, sondern Ihnen nur typische Varianten
aufzeigen,
damit Sie die Scheu vor dieser Vielfalt abbauen. Härten Sie sich von Anfang an
dagegen ab.
Nur zum
Verständnis, nicht als Vorbild gedacht: Sie können eine Menge weglassen. Folgendes 2-Zeilen-Programm läuft z.B. durch den MS-VC++-Compiler: #include <windows.h> Sie erhalten dann
z.B. entsprechende Warnungen: |
Innerhalb WinMain(...) wird in unserem
kleinen Programm ein Fenster ausgegeben.
Die API-Funktion MessageBox(...) kümmert sich hier einfach um alles, vor
allem um das Fenster:
int MessageBox
(
HWND hWnd, //
handle of owner window
LPCTSTR lpText, //
address of text in message box
LPCTSTR lpCaption, //
address of title of message box
UINT uType //
style of message box
);
Manche Programmierer wollen fensterlose
Windows-Programme erstellen.
Das ist leicht möglich, wenn man z.B. anstelle MessageBox(...) andere
"fensterlose" Aktionen einfügt.
Damit Sie verstehen, was damit gemeint ist, hier ein kleines Beispiel:
#include
<windows.h>
int
WINAPI WinMain( HINSTANCE, HINSTANCE, PSTR, int ) |
Nachfolgend finden Sie noch ein weiteres
Beispiel für ein Windows-Programm ohne eigenes Fenster.
Das Programm ruft den PC-Taschen-Rechner (calc.exe) und den Notizblock (notepad.exe)
auf.
#include <windows.h>
int
WINAPI WinMain( HINSTANCE, HINSTANCE, PSTR, int ) |
2-Zeiler-Version (nur
zum Spaß!): #include <windows.h> WinMain( HINSTANCE, HINSTANCE, PSTR,int){WinExec("calc.exe",0);} |
Nachstehend finden Sie noch ein kleines Beispiel,
mit dem Sie testen können, ob eine Internet-Verbindung existiert oder nicht.
Hierbei müssen Sie außer der Datei windows.h auch noch WinInet.h in den
Sourcecode einbinden und im Linker die Datei WinInet.lib angeben:
#include
<windows.h> #include <WinInet.h> // einzubindende Library : WinInet.lib int
WINAPI WinMain( HINSTANCE, HINSTANCE, PSTR, int ) |
Sie haben bisher windows.h und WinMain(...)
als wesentliche Elemente der Windows-Programmierung kennen gelernt.
Die Basis ist also:
#include
<windows.h>
int
WINAPI WinMain(
HINSTANCE, HINSTANCE, PSTR, int ) |