1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
#include <Windows.h>
//Prototype der Callback-Funktion
LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
//Hauptprogramm
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst,
LPSTR lpcmdline, int ncmdshow)
{
WNDCLASSEX windowclass;
HWND hWnd;
MSG message;
//Klassenname des Fensters ist frei wählbar
const TCHAR szClassName[] = TEXT ("Erstes Fenster");
//Struktur mit gewünsten Eigenschaften füllen
//Größe der Struktur zwischenspeichern
windowclass.cbSize = sizeof (WNDCLASSEX);
//Fenster soll beim verschieben neu gezeichnet werden
windowclass.style = CS_HREDRAW | CS_VREDRAW;
//Zeiger auf Callback-Funktion
windowclass.lpfnWndProc = WindowProc;
//Keine erweiterte Einstellungen
windowclass.cbClsExtra = 0;
windowclass.cbWndExtra = 0;
//Instanz speichern
windowclass.hInstance = hInst;
//Icons und Cursor festlegen
windowclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
windowclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
windowclass.hCursor = LoadCursor (NULL, IDC_HELP);
//Hintergrundfarbe festlegen
windowclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND+1;
//Ein Menü brauchen wir nicht
windowclass.lpszMenuName = NULL;
//KlassenName angeben
windowclass.lpszClassName = szClassName;
//Fensterklasse registriern
if (!RegisterClassEx (&windowclass) )
return (0);
//Das Fenster erzeugen
hWnd = CreateWindowEx (NULL,
szClassName,
TEXT("Mein erstes Fenster!"),
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT,
300, 250,
NULL,
NULL,
hInst,
NULL);
//Prüfen ob alles glatt ging
if (hWnd == NULL)
return (0);
//Der "Herzschlag" des Programms
//Hier werden alle Nachrichten abgeholt,
//übersetzt und weitergeleitet
while (GetMessage (&message, NULL, 0, 0) )
{
TranslateMessage (&message);
DispatchMessage (&message);
}
//Id des Child-Fensters
#define ID_BEISPIELBUTTON 4001
//Handle für den statischen Text
HWND hButton;
// Statischen Text als Child-Fenster erstellen
hButton = CreateWindow (TEXT("BUTTON"),
TEXT("Beispieltext"),
BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD,
90, 150,
95, 40,
hWnd,
(HMENU)ID_BEISPIELBUTTON,
hInst,
NULL);
//Programm beenden
return (int)(message.wParam);
}
//Callback-Funktion zur Nachrichtenverarbeitung
LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
//Messages auswerten
switch (message)
{
//Fenster schließen? (Auch ALt+F4)
case WM_DESTROY:
{
//Nachricht zum beenden schicken
PostQuitMessage (0);
return (0);
}
//Wurde eine Taste gedrückt?
case WM_KEYDOWN:
{
//Ja, also je nach Taste verzweigen
switch (wParam)
{
//Wurde Escape gedrückt?
case VK_ESCAPE:
{
//Ja, also Nachricht zum Beenden schicken
PostQuitMessage (0);
return (0);
}
}
} break;
}
//Die Nachricht wurde nicht von uns verarbeitet, also
//von Windows verarbeiten lassen
return (DefWindowProc (hWnd, message, wParam, lParam) );
}
|