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
|
(InitWindow.cpp)
// Hilfsdatei INITWINDOW.CPP
// =========================
// Diese Datei deklariert vier wichtige Funktionen, die für die
// Arbeit mit einem Fenster nützlich sind. Diese werden hauptsächlich
// von den Beispielprogrammen verwendet.
#define _INITWINDOW_CPP
#include <Windows.h>
#include <TriBase.h>
#include "InitWindow.h"
// ******************************************************************
// Funktion zum Initialisieren des Fensters
tbResult InitWindow(int iWidth,
int iHeight,
char* pcName,
HICON hIcon)
{
// Fensterklassenstruktur ausfüllen
WNDCLASSEX WindowClass = {sizeof(WNDCLASSEX), CS_CLASSDC, WindowProc, 0, 0,
GetModuleHandle(NULL), hIcon, LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)), NULL,
NULL, "Direct3D window", NULL};
// Klasse registrieren
if(!RegisterClassEx(&WindowClass))
{
TB_ERROR("Fensterklassenregistrierung fehlgeschlagen!", TB_ERROR);
}
TB_INFO("Fensterklasse wurde registriert!");
RECT Rect;
SetRect(&Rect, 0, 0, iWidth, iHeight);
AdjustWindowRect(&Rect, WS_VISIBLE | WS_OVERLAPPEDWINDOW, FALSE);
iWidth = Rect.right - Rect.left;
iHeight = Rect.bottom - Rect.top;
// Fenster erstellen und prüfen
g_hWindow = CreateWindow("Direct3D window",
pcName,
WS_VISIBLE | WS_OVERLAPPEDWINDOW,
GetSystemMetrics(SM_CXSCREEN) / 2 - iWidth / 2,
GetSystemMetrics(SM_CYSCREEN) / 2 - iHeight / 2,
iWidth,
iHeight,
NULL,
NULL,
GetModuleHandle(NULL),
NULL);
if(g_hWindow == NULL)
{
TB_ERROR("Erstellung des Fensters ist fehlgeschlagen!\n", TB_ERROR);
}
// Alles OK!
TB_INFO("Fenster wurde erstellt!");
return TB_OK;
}
// ******************************************************************
// Funktion zum Herunterfahren der Fensterkomponente
tbResult ExitWindow()
{
// Klasse löschen
UnregisterClass("Direct3D window", GetModuleHandle(NULL));
TB_INFO("Fensterkomponente wurde heruntergefahren!");
return TB_OK;
}
// ******************************************************************
// Die Nachrichtenfunktion des Fensters
LRESULT WINAPI WindowProc(HWND hWindow,
unsigned int uiMessage,
WPARAM WParam,
LPARAM LParam)
{
PAINTSTRUCT Paint;
switch(uiMessage)
{
case WM_CREATE:
break;
case WM_PAINT:
// Das Fenster mit Schwarz füllen
BeginPaint(hWindow, &Paint);
FillRect(Paint.hdc, &Paint.rcPaint, (HBRUSH)(GetStockObject(BLACK_BRUSH)));
EndPaint(hWindow, &Paint);
break;
case WM_CLOSE:
DestroyWindow(hWindow);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWindow, uiMessage, WParam, LParam);
}
return TRUE;
}
// ******************************************************************
|