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 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 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
#include <windows.h> #include <string.h> #include <D3D9.h> #include <D3DX9.h> //Diese Funktion initalisiert Direct3D BOOL InitDirect3D(HWND hWnd); //Initialisiert den Device HWND CreateMainWindow(HINSTANCE hInstance); //Füllt eine WindowClass, Registriert diese und Kreiert ein Extended Window LRESULT CALLBACK Message(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); //MessageHandler void CleanUpDirect3D(void); //Gibt die Devices frei void CreateD3DFont(void); //Erstellt ein Schrift Objekt //---------------------------------------------------------------------------------------------- //Globale Variablen erkennbar durch "g_" LPDIRECT3D9 g_lpD3D; //Globale Variable die auf DirectD3D zeigt LPDIRECT3DDEVICE9 g_lpD3DDevice; //Globale Variable die auf ein Device zeigt LPD3DXFONT g_lpD3DFont; //Globale Variable, die auf eine Schrift Objekt zeigt //---------------------------------------------------------------------------------------------- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { HWND hWnd; MSG msg; if((hWnd = CreateMainWindow(hInstance)) == NULL) //Generiert das Windowsfenster { MessageBox(NULL, L"Das Fenster konnte nicht erstellt werden!", L"Fehler", MB_OK|MB_ICONEXCLAMATION); return 1; } if(!InitDirect3D(hWnd)) //Generiert den Direct3D Buffer und Device { MessageBox(NULL, L"Direct3D konnte nicht initalisiert werden!", L"Fehler", MB_OK|MB_ICONEXCLAMATION); return 1; } while(GetMessage(&msg, 0, 0, 0)) //Standard Messageschleife { TranslateMessage(&msg); DispatchMessage(&msg); } CleanUpDirect3D(); //Gibt nach Beendigung des Programms die Direct3D Device frei return 0; } BOOL InitDirect3D(HWND hWnd) { D3DPRESENT_PARAMETERS PParams; g_lpD3D = Direct3DCreate9(D3D_SDK_VERSION); //Vordefinierte Funktion von Direct3D zur Erstellung eines Devices if(g_lpD3D == NULL) //Abfrage ob ein Device erstellt wurde oder nicht { MessageBox(NULL, L"Das Direct3D Objekt konnte nicht initalisiert werden!", L"Fehler", MB_OK|MB_ICONEXCLAMATION); return 1; } ZeroMemory(&PParams, sizeof(PParams)); //Legt einen Speicher für eine Variable an PParams.SwapEffect = D3DSWAPEFFECT_DISCARD; //PParams (der Buffer) bekommt alles zugewiesen PParams.hDeviceWindow = hWnd; //Ein handle auf das Fenster in dem der Inhalt des Buffers dargestellt wird PParams.Windowed = TRUE; //Ob er in Fullscreen ist oder nicht PParams.BackBufferWidth = 800; //Größe des Buffers PParams.BackBufferHeight = 600; //Größe des Buffers PParams.BackBufferFormat = D3DFMT_A8R8G8B8; //Farbwert des Buffers if(FAILED(g_lpD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &PParams, &g_lpD3DDevice))); { MessageBox(NULL, L"Das Direct3D Gerät konnte nicht angelegt werden", L"Fehler", MB_OK|MB_ICONEXCLAMATION); return 1; } return TRUE; } HWND CreateMainWindow(HINSTANCE hInstance) { WNDCLASSEX wndClass = { sizeof(WNDCLASSEX), //Größe für die Klasse angeben CS_DBLCLKS|CS_OWNDC|CS_HREDRAW|CS_VREDRAW, //Standardstil angeben Message, 0, 0, hInstance, LoadIcon(NULL, IDI_WINLOGO), LoadCursor(NULL, IDC_ARROW), (HBRUSH)GetStockObject(WHITE_BRUSH), NULL, L"Window", LoadIcon(NULL, IDI_WINLOGO) }; RegisterClassEx(&wndClass); return CreateWindowEx( NULL, L"Window", L"DirectX", WS_OVERLAPPED|WS_VISIBLE, 10, 10, 800, 600, NULL, NULL, hInstance, NULL); } LRESULT CALLBACK Message(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_KEYDOWN: switch(wParam) { case VK_ESCAPE: DestroyWindow(hWnd); return 0; } return 0; case WM_PAINT: D3DCOLOR TextColor = D3DCOLOR_XRGB(0xFF,0,0); //Variable mit einer Direct3D Farbe RECT rect = {100, 100, 0, 0}; //Werte für den Zeichenbereich CreateD3DFont(); //Generiert und lädt eine Schriftart in den Buffer g_lpD3DDevice->Clear(0,0,D3DCLEAR_TARGET, RGB(0,0,0), 0, 0); //Das Device wird neu gesetzt g_lpD3DDevice->BeginScene(); //Zeigt das man zu zeichnen beginnen will g_lpD3DFont->DrawText(NULL, L"DirectX 9.0", -1, &rect, DT_CALCRECT, TextColor); //Gibt einen Text auf dem Bildschirm aus g_lpD3DFont->DrawText(NULL, L"DirectX 9.0", -1, &rect, DT_CENTER, TextColor); //Man muss zuerst den Bereich berechnen lassen und dann kann man ihn erst ausgeben lassen. g_lpD3DDevice->EndScene(); //Zeigt dass das Zeichnen beendet ist g_lpD3DDevice->Present(0,0,0,0); return 0; } return DefWindowProc(hWnd, msg, wParam, lParam); } void CleanUpDirect3D(void) { if(g_lpD3DDevice) { g_lpD3DDevice->Release(); g_lpD3DDevice = NULL; } if(g_lpD3D) { g_lpD3D->Release(); g_lpD3D = NULL; } } void CreateD3DFont(void) { D3DXFONT_DESC FontDesc = {0}; wcscpy(FontDesc.FaceName, L"Calibri"); //Der Name der Schriftart wird gespeichert FontDesc.Width = 50; //Die schrifthöhe FontDesc.Height = 200; //Die schriftweite D3DXCreateFontIndirect(g_lpD3DDevice, &FontDesc, &g_lpD3DFont); //Generiert die Schriftart mit allen Daten } |
Zitat von »"yosh-summer"«
ShowWindow(hWnd, NULL)
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 |
while(g_run) { if(PeekMessage(&msg, hWnd, NULL, NULL, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else Render(); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void Render(void) { D3DCOLOR TextColor = D3DCOLOR_XRGB(0xFF,0,0); //Variable mit einer Direct3D Farbe RECT rect = {100, 100, 0, 0}; //Werte für den Zeichenbereich CreateD3DFont(); //Generiert und lädt eine Schriftart in den Buffer g_lpD3DDevice->Clear(0,0,D3DCLEAR_TARGET, RGB(0,0,0), 0, 0); //Das Device wird neu gesetzt g_lpD3DDevice->BeginScene(); //Zeigt das man zu zeichnen beginnen will g_lpD3DFont->DrawText(NULL, L"DirectX 9.0", -1, &rect, DT_CALCRECT, TextColor); //Gibt einen Text auf dem Bildschirm aus g_lpD3DFont->DrawText(NULL, L"DirectX 9.0", -1, &rect, DT_CENTER, TextColor); //Man muss zuerst den Bereich berechnen lassen und dann kann man ihn erst ausgeben lassen. g_lpD3DDevice->EndScene(); //Zeigt dass das Zeichnen beendet ist g_lpD3DDevice->Present(0,0,0,0); } |
Werbeanzeige