Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
![]() |
Quellcode |
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 |
#include <dinput.h> #include "globales.h" // Allgemeine Klasse für jedes Eingabegerät class Geraeteerstellung { public: LPDIRECTINPUT8 lpDI; // Direct Input(R) - Objekt LPDIRECTINPUTDEVICE8 lpDIGeraet; int DI_Init_general(HINSTANCE hinst, LPDIRECTINPUT8 lpDI); }; // Klasse für eine Tastatur mit maximal 256 tasten class Tastatur { private: char Key_Buffer[256]; public: int Tastatur_Init(LPDIRECTINPUT8 lpDI, LPDIRECTINPUTDEVICE8 lpDIGeraet, HWND hwnd); //int Tastatur_Eingabe(); }; |
![]() |
Quellcode |
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 |
#include <windows.h> #include "NC_DI_Init.h" #include <dinput.h> #include "globales.h" // Methoden-Implementierung der allgemeinen Geräteklasse int Geraeteerstellung::DI_Init_general(HINSTANCE hinst, LPDIRECTINPUT8 lpDI) { if (FAILED(DirectInput8Create(hinst, DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&lpDI, NULL))) { MessageBox(NULL, "Fehler beim Erstellen des Direct Input Objektes", "Fehlermeldung", MB_OK); } MessageBox(NULL, "KEIN Fehler beim Erstellen des Direct Input Objektes", "Fehlermeldung", MB_OK); return (1); } // Methoden-Implementierung der Tastaturklasse int Tastatur::Tastatur_Init(LPDIRECTINPUT8 lpDI, LPDIRECTINPUTDEVICE8 lpDIGeraet, HWND hwnd) { lpDIGeraet = NULL; if (FAILED(lpDI->CreateDevice(GUID_SysKeyboard, &lpDIGeraet, NULL))) { MessageBox(NULL, "Fehler beim Erstellen des Tastaur-Objektes", "Fehlermeldung", MB_OK); return 1; } if (FAILED(lpDIGeraet->SetDataFormat(&c_dfDIKeyboard))) { MessageBox(NULL, "Fehler beim Einstellen des Datenformates", "Fehlermeldung", MB_OK); return 1; } if (FAILED(lpDIGeraet->SetCooperativeLevel(hwnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND))) { MessageBox(NULL, "Fehler beim Einstellen der Kooperationsebene", "Fehlermeldung", MB_OK); return 1; } if (FAILED(lpDIGeraet->Acquire())) { MessageBox(NULL, "Fehler beim AKtivieren der Tastatur", "Fehlermeldung", MB_OK); return 1; } else { MessageBox(hwnd, "Alles OK!!!", "Hinweis", MB_OK); return 0; } } |
![]() |
Quellcode |
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 |
#define WIN32_LEAN_AND_MEAN #include <windows.h> #include "NC_DI_Init.h" #include "globales.h" LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { switch(message) { case WM_DESTROY: { PostQuitMessage(0); return(0); } break; default:break; } // switch return (DefWindowProc(hwnd, message, wparam, lparam)); } // WindowProc int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hprevinst, LPSTR lpcmdline, int ncmdshow) { WNDCLASSEX winclass; HWND hwnd; MSG message; const char szclassname[] = "Klassenname"; Geraeteerstellung Device; Tastatur Keyboard; winclass.cbSize = sizeof(WNDCLASSEX); winclass.style = CS_HREDRAW | CS_VREDRAW; winclass.lpfnWndProc = WindowProc; winclass.cbClsExtra = 0; winclass.cbWndExtra = 0; winclass.hInstance = hinst; winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); winclass.hCursor = LoadCursor(NULL, IDC_ARROW); winclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); winclass.lpszMenuName = NULL; winclass.lpszClassName = szclassname; winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if (!RegisterClassEx(&winclass)) return(0); if (!(hwnd = CreateWindowEx(NULL, szclassname, "3D Spieleprogrammierung - Titelleiste", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0,0, 400,300, NULL, NULL, hinst, NULL))) return(0); ShowWindow(hwnd, ncmdshow); // überflüssig wenn WS_VISIBLE UpdateWindow(hwnd); // überflüssig wenn WS_VISIBLE while(GetMessage(&message,NULL,0,0)) { TranslateMessage(&message); DispatchMessage(&message); } // while Device.DI_Init_general(hinst, lpDI); Keyboard.Tastatur_Init(lpDI, lpDIGeraet, hwnd); return message.wParam; } // WinMain |
Zitat
--------------------Konfiguration: Windowfenster - Win32 Debug--------------------
Kompilierung läuft...
NC_Main.cpp
c:\dxsdk\include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800
c:\c++\nc_d3d_engine\windowfenster\nc_main.cpp(7: error C2065: 'lpDI' : nichtdeklarierter Bezeichner
c:\c++\nc_d3d_engine\windowfenster\nc_main.cpp(79) : error C2065: 'lpDIGeraet' : nichtdeklarierter Bezeichner
Ueberspringen... (keine relevanten Aenderungen gefunden)
NC_DI_Init.cpp
Fehler beim Ausführen von cl.exe.
Windowfenster.exe - 2 Fehler, 0 Warnung(en)
![]() |
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Instanzen erstellen Geraeteeinstellung Tastatur; Geraeteeinstellung Maus; // =========================== // Tastatur: // benutzen: Device.DI_Init_general(hinst, Tastatur.lpDI); // auf das lpID Objekt von Tastatur zugreifen Keyboard.Tastatur_Init(Tastatur.lpDI, Tastatur.lpDIGeraet, hwnd); // auf das lpIDGeraet Objekt von Tastatur zugreifen // =========================== // Maus: // benutzen: Device.DI_Init_general(hinst, Maus.lpDI); // auf das lpID Objekt von Maus zugreifen Mouse.Maus_Init(Maus.lpDI, Maus.lpDIGeraet, hwnd); // auf das lpIDGeraet Objekt von Maus zugreifen |
![]() |
Quellcode |
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 |
// Datei: Types.h // ////////////////////////////////////////////////////////////////////////////////// // Autor: Patrick Ullmann © Xarent Interactive // Erstellt: 05.10.03 // Änderungen: 05.10.03 (Patrick) Datei erstellt // 09.10.03 (David) PI Definition und Linker eingerichtet. // ////////////////////////////////////////////////////////////////////////////////// // Beschreibung: Diverse Dateitypdefinitionen und Makros #ifndef _TYPES_H_ #define _TYPES_H_ // I N C L U D E S ////////////////////////////////////////////////////////////////// // Bei Win32 muss die Windows.h includiert werden! #ifdef _WIN32 #define WIN32_LEAN_AND_MEAN #include <windows.h> #endif // Standardheader für das Programm #include <string> #include <sstream> #include <fstream> #include <iostream> #include <cmath> #include <vector> // SDL und OpenGL includieren #include <SDL\SDL.h> #include <GL\gl.h> #include <GL\glu.h> #include <GL\glaux.h> // L I N K E R ////////////////////////////////////////////////////////////////////// // Windows kann diese Libs selbst linken, sonst muss man manuel dran. #ifdef _WIN32 #pragma comment(lib, "SDL.lib") #pragma comment(lib, "SDLmain.lib") #pragma comment(lib, "opengl32.lib") #pragma comment(lib, "glu32.lib") #pragma comment(lib, "glaux.lib") #endif // D E F I N I T I O N E N ////////////////////////////////////////////////////////// // Diese Dateitypen sind normalerweise in der windef.h drin, wir nehmen aber aus // Portablen gründen unsere eigenen Definitionen, die denen aus // der Windef.h entsprechen. typedef unsigned long DWORD; typedef unsigned short WORD; typedef unsigned char BYTE; typedef unsigned int UINT; // PI ist sehr wichtig!! const float PI = 3.1415926535897932f; // Bei Win32 muss man die definition von main aufheben wegen SDL #ifdef _WIN32 #undef main #endif // enum für verschiedene Filetypes enum FILE_TYPE { FILE_UNKNOW = 0, FILE_TGA = 1, FILE_BMP = 2, FILE_PNG = 3 }; // M A K R O S ////////////////////////////////////////////////////////////////////// // Manche Compiler kennen dieses Makro nicht, drum selbstdefinieren. #ifndef __FUNCTION__ #define __FUNCTION ("unknow") #endif // Da ich ne Faule Sau bin benutz ich dieses Makro einfach mal :D #ifndef LOG_PARAMS #define LOG_PARAMS __FILE__, __LINE__, __FUNCTION__ #endif #ifndef PROTOKOLL #define PROTOKOLL CLog::getInstance() #endif #ifndef VIDEO #define VIDEO CVideo::getInstance() #endif #ifndef KEYBOARD #define KEYBOARD CKeyboardManager::getInstance() #endif #ifndef GAMEMANAGER #define GAMEMANAGER CGameManager::getInstance() #endif #ifndef TEXTUREMANAGER #define TEXTUREMANAGER CTextureManager::getInstance() #endif #ifndef ENTITYMANAGER #define ENTITYMANAGER CEntityManager::getInstance() #endif // F U N K T I O N E N ////////////////////////////////////////////////////////////// // Noch keine // S T R U K T U R E N ////////////////////////////////////////////////////////////// // Noch keine #endif |
![]() |
Quellcode |
1 2 |
Geraeteerstellung Device; Tastatur Keyboard; |
![]() |
Quellcode |
1 2 |
Device.DI_Init_general(hinst, Device.lpDI); Keyboard.Tastatur_Init(Device.lpDI, Device.lpDIGeraet, hwnd); |
![]() |
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
if (!(hwnd = CreateWindowEx(NULL, szclassname, "3D Spieleprogrammierung - Titelleiste", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0,0, 400,300, NULL, NULL, hinst, NULL))) return(0); ShowWindow(hwnd, ncmdshow); // überflüssig wenn WS_VISIBLE UpdateWindow(hwnd); // überflüssig wenn WS_VISIBLE while(GetMessage(&message,NULL,0,0)) { TranslateMessage(&message); DispatchMessage(&message); } // while Device.DI_Init_general(hinst, lpDI); Keyboard.Tastatur_Init(lpDI, lpDIGeraet, hwnd); // HIER<--------------- |
![]() |
Quellcode |
1 |
hr = lpDIGeraet->SetCooperativeLevel(hwnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); |
Werbeanzeige