DarkWinAPI by Darkleo.com

Windowsfenster mit funktionen

#define STRICT
#define WIN32_LEAN_AND_MEAN


#include <windows.h>
#include <windowsx.h>


static HINSTANCE hInstance;
static HWND hwndMain;
static TCHAR szMainWndClass[] = TEXT("HauptfensterKlasse");
static TCHAR szHalloMsg[] = TEXT("Achtung Windows!");

// Funktion WmPaint
static void WmPaint(HWND hwnd)
{
PAINTSTRUCT ps;
HDC hdc;

hdc = BeginPaint(hwnd, &ps);
TextOut(hdc,100, 100,szHalloMsg);
EndPaint(hwnd, &ps);
}

//Hauptfensterprozedur
static
LRESULT WINAPI Hauptfensterprozedur(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;

case WM_PAINT:
return HANDLE_WM_PAINT(hwnd, wParam, lParam, WmPaint);
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

//Funktion RegisterMainWindow
static
BOOL RegisterMainWindow(void)
{
WNDCLASS wg;
wg.style = 0;
wg.lpfnWndProc = Hauptfensterprozedur;
wg.cbClsExtra = 0;
wg.cbWndExtra = 0;
wg.hInstance = hInstance;
wg.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wg.hCursor = LoadCursor(NULL, IDC_ARROW);
wg.hbrBackground = GetSysColorBrush(COLOR_WINDOW);
wg.lpszMenuName = NULL;
wg.lpszClassName = szMainWndClass;
return RegisterClass(&wg) !=0;
}

//Funktion CreateMainWindow
static
BOOL CreateMainWindow(void)
{
hwndMain = CreateWindowEx(
WS_EX_CLIENTEDGE,
szMainWndClass,
TEXT("
Hallo Darkleo.com"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
(HWND)NULL,
(HMENU)NULL,
hInstance,
NULL);

return hwndMain != NULL;
}

//WinMain Start Einsprung des Programms
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpszCmdLine, int nCmdShow)
{
MSG msg;
hInstance = hinst;

if (!RegisterMainWindow()) return 0;
if (!CreateMainWindow()) return 0;

ShowWindow(hwndMain, nCmdShow);
UpdateWindow(hwndMain);


while (GetMessage(&msg, NULL, 0, 0)) //Das Herz jedes Windowsprogramms
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

1 Überprüft die Variable ANSI/ UNI
2 Nicht laden von weiter unnötig verlinkten *.H
3,4 Einbinden von Header Dateien
6,10 Definition von static Variablen die nach wieder anklicken in das Programm unverändert bleiben, weil andere Programme auf diese Variablen keinen zugriff haben.

13 WmPaint Funktion
15 PAINTSTRUCT strukturvariable definieren
16 HDC-handle device context variable definieren
18 System Kontext vom System ausleihen
19 Text ausgeben
20 System Kontext ans System zurück geben
21 Ende der WmPaint Funktion

24 Hauptfensterprozedur wird in RegisterMainWindow(40) in (44) definiert.
27 Die gesamte switch verarbeitet die Nachrichten
29 WM_DESTROY oben rechts das kreuz 
30 PostQuitMessage(0) gibt eine Message ins Systemwarteschlange zum Beenden des Programms in (97) wird die Nachricht ankommen und die while schleife unterbrochen, Programm ende.
31 Beenden der Hauptfensterprozedur
33 WM_PAINT ob das Fenster noch mal gezeichnet werden soll
34 Funktionsaufruf der WmPaint Funktion.
36 Sende alle nicht verarbeiteten Nachrichten wieder ins System zurück.

40-54 RegisterMainWindow in dieser Funktion wird das Fenster im System Registriert z.B. Fenstergröße, Fensterfarbe usw. die Funktion wird in (91) aufgerufen wenn ein Fehler passiert wird das Programm Beendet.

57-82 CreateMainWindow wird das Fenster im Speicher vorbereitet die Funktion wird in (92) aufgerufen wenn ein Fehler passiert wird das Programm Beendet.

85-103 Ist die Hauptfunktion WinMain von hier aus werden fast alle anderen Funktionen aufgerufen (Direkt und Indirekt) außer Hauptfensterprozedur die wird vom System aufgerufen
91 RegisterMainWindow wenn ein Fehler passiert wird das Programm Beendet.
92 CreateMainWindow wenn ein Fehler passiert wird das Programm Beendet.
94 ShowWindow Fensteranzeigen
95 UpdateWindow Fensteranzeige Aktualisieren (Neuzeichnen)
97-101 Verarbeiten von Nachrichten
99 TranslateMessage Decodieren von Eingabe Zeichen
100 DispatchMessage Verteilen der Nachrichten auf die Funktionen wie z.B. Hauptfensterprozedur