Navigation
Artikel
Stuff
RSS Feeds
|
Sourcecodes - Das erste Direct3D ProgrammSprachenübersicht/C / C++/ C#/Spieleprogrammierung/DirectX Keywords: D3D, DirectX, Direct3D Mit diesem Code erstellt man eine DirectX9 D3D Anwendung
Code: // Headerdatei #include <windows.h> #include <d3d9.h> #include <d3dx9.h> HWND hWnd = 0; // Anwendungsfenster erzeugen HWND CreateMainWindow(HINSTANCE hInstance); // Callback Funktion zur Nachrichtenbehandlung LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); LPDIRECT3D9 g_pD3D =NULL; LPDIRECT3DDEVICE9 pDevice = NULL; // Windows main-Funktion int WINAPI WinMain(HINSTANCE hInstance, // Handle der Programminstanz HINSTANCE hPrevInstance, // Handle der letzten Instanz LPSTR lpCmdLine, // Kommandozeile int nCmdShow) // Art wie das Fenster angezeigt werden soll { hWnd = CreateMainWindow(hInstance); if(0 == hWnd) { MessageBox(0,"Fenster konnte nicht erzeugt werden","Fehler",MB_OK); return 0; } // Struktur, in der Informationen zur Nachricht gespeichert werden MSG msg; if(!(g_pD3D =Direct3DCreate9(D3D_SDK_VERSION))) { MessageBox(0,"Fehler beim erzeugen eines D3D Objekts","Fehler beim Initialisieren von Direct3D",MB_OK); } D3DPRESENT_PARAMETERS PParams; ZeroMemory(&PParams,sizeof(PParams)); PParams.SwapEffect=D3DSWAPEFFECT_DISCARD; PParams.hDeviceWindow=hWnd; PParams.Windowed =FALSE; PParams.BackBufferWidth=800; PParams.BackBufferHeight=600; PParams.BackBufferFormat = D3DFMT_X8R8G8B8; PParams.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER; if(FAILED(g_pD3D ->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL, hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&PParams,& pDevice))) { MessageBox(hWnd,"Fehler beim anlegen des Geräts","Fehler beim Initialisieren von Direct3D",MB_OK); } while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } if(NULL !=g_pD3D) { g_pD3D->Release(); g_pD3D=NULL; } if(NULL !=pDevice) { pDevice->Release(); pDevice=NULL; } return 0; } // Fenster erzeugen HWND CreateMainWindow(HINSTANCE hInstance) { WNDCLASSEX wndClass = { sizeof(WNDCLASSEX), // Größe angeben CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW, // Standardstile MessageHandler, // Callback-Funktion 0, // Zusätzliche Angaben 0, // nicht benötigt hInstance, // Anwendungsinstanz LoadIcon(NULL, IDI_WINLOGO), // Windows-Logo LoadCursor(NULL, IDC_ARROW), // Normaler Cursor (HBRUSH)GetStockObject(WHITE_BRUSH), // Weißer Pinsel NULL, // kein Menü "WindowClass", // Der Name der Klasse LoadIcon(NULL, IDI_WINLOGO) // Windows Logo }; RegisterClassEx(&wndClass); return CreateWindowEx(NULL, // Keine erweiterten Stile nutzen "WindowClass", // Klassenname "Hello Windows", // Fenstertitel WS_OVERLAPPEDWINDOW | // Fenster WS_VISIBLE, // Eigenschaften 100, 100, 400, 300, // Anfangsposition und Größe NULL, // Handle des Elternfensters NULL, // Handle des Menüs hInstance, // Anwendungsinstanz NULL); // wird nicht benötigt } LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_DESTROY: PostQuitMessage(0); return 0; break; case WM_PAINT: pDevice->Clear(0,0,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,0xFF),0,0); pDevice->BeginScene(); LPDIRECT3DSURFACE9 lpBackBuffer; HDC hDC; pDevice->GetBackBuffer(0,0, D3DBACKBUFFER_TYPE_MONO,&lpBackBuffer); if(FAILED(lpBackBuffer->GetDC(&hDC))) { MessageBox(hwnd,"Fehler","Fehler beim Abfragen von DC handle",MB_OK); } TextOut(hDC,10,30,"Hallo Direct3D",14); lpBackBuffer->ReleaseDC(hDC); pDevice->EndScene(); pDevice->Present(0,0,0,0); return 0; break; } return DefWindowProc(hwnd, msg, wParam, lParam); } Gibt es noch irgendwelche Fragen, oder wollen Sie über den Artikel diskutieren? Sprachenübersicht/C / C++/ C#/Spieleprogrammierung/DirectX/Das erste Direct3D Programm |