Ich habe keine Fenster.h in meinem Projekt und ich finde auch keine in dem Ordner der Buch-CD. Die Projektdatei habe ich zudem einfach von der Buch-CD kopiert. Die einzigen Header die ich in dem Projekt habe sind: InitWindow.h und resource.h.
Hier ist die Fenster.cpp:
// Kapitel 2
// Beispielprogramm 01
// ===================
// Erstellen des Fensters und Aufrufen der Nachrichtenschleife.
// Die dafür nötigen Funktionen sind in der Datei InitWindow.cpp
// gespeichert.
#include <windows.h>
#include <TriBase.h>
#include "..\\..\\Allgemeines\\InitWindow.h"
#include "Resource.h"
// ******************************************************************
// Render-Funktion
tbResult Render(float fNumSecsPassed)
{
return TB_OK;
}
// ******************************************************************
// Move-Funktion
tbResult Move(float fNumSecsPassed)
{
return TB_OK;
}
// ******************************************************************
// Windows-Hauptfunktion
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
char* pcCmdLine,
int iShowCmd)
{
// TriBase-Engine initialisieren
tbInit();
// Fenster initialisieren
InitWindow(640, 480, "Beispielprogramm Nr. 2: Fenster",
LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1)));
// Nachrichtenschleife
tbDoMessageLoop(Render, Move);
// Fenster herunterfahren
ExitWindow();
// Engine herunterfahren
tbExit();
return 0;
}
Und das ist InitWindow.cpp:
#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;
}
// ******************************************************************