Kann mir jemand helfen?
-
Hallo,
ich weiß echt nicht warum das nachfolgende Programm nicht funktioniert.
Beim Compilen treten Fehler wie: Syntaxfehler: Bezeichner 'LPDIRECTDRAWSURFACE7'. Das seltsame ist aber das der Syntaxfehler nicht in meiner Datei sondern in der ddraw.h vom DirectX SDK auftritt. Die libs hab ich auch eingebunden. Ich verwende visual C++.NET. Hier ist der Code://Datei Frame.h #define WIN32_LEAN_AND_MEAN #define SPIEL_AUSWAHL 0 #define SPIEL_START 1 #define SPIEL_LAUEFT 2 #define SPIEL_NEUSTART 3 #define SCREEN_BREITE 1024 #define SCREEN_HOEHE 768 #define SCREEN_BPP 8 bool Spiel_Initialisieren(void); bool Spiel_Beenden(void); bool xxxDDraw_PufferWechseln(void); bool xxxDDraw_initialisieren(void); bool xxxDDraw_Puffer_leeren(LPDIRECTDRAWSURFACE7 lpDDsurf,UCHAR Farbe); bool xxxMale_Pixel(int x, int y, UCHAR Farbe,LPDIRECTDRAWSURFACE7 lpDDsurf); bool xxxDDraw_beenden(void); // Datei Main.cpp #define WIN32_LEAN_AND_MEAN #pragma comment(lib,"ddraw.lib") #pragma comment(lib,"dxguid.lib") #include "Frame.h" #include <ddraw.h> #include <windows.h> bool done; int SPIEL_ZUSTAND; HWND hwnd; LPDIRECTDRAW7 lpDD; LPDIRECTDRAWSURFACE7 lpDDSPrimary; LPDIRECTDRAWSURFACE7 lpDDSBack; LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { switch(message) { case WM_KEYDOWN: switch(wparam) { case VK_ESCAPE: { PostMessage(hwnd, WM_CLOSE,0,0); return 0; } break; case VK_F12: { xxxDDraw_PufferWechseln(); return 0; } break; } case WM_DESTROY: { done = true; PostQuitMessage(0); return(0); } break; default: { return (DefWindowProc(hwnd,message,wparam,lparam)); break; } } } int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hprevinst, LPSTR lpcmdline, int ncmdshow) { WNDCLASSEX winclass; MSG message; const char szclassname[] = "Klassenname"; DWORD loop_start_time; 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, IDC_ARROW); 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); done = false; SPIEL_ZUSTAND = SPIEL_AUSWAHL; Spiel_Initialisieren(); while(!done) { while(GetMessage(&message,NULL,0,0)) { TranslateMessage(&message); DispatchMessage(&message); } loop_start_time = GetTickCount(); switch(SPIEL_ZUSTAND) { case SPIEL_AUSWAHL: { SPIEL_ZUSTAND = SPIEL_START; } case SPIEL_START: { SPIEL_ZUSTAND = SPIEL_LAUEFT; } case SPIEL_LAUEFT: { // ......... } case SPIEL_NEUSTART: { SPIEL_ZUSTAND = SPIEL_START; } break; default: break; } while((GetTickCount()-loop_start_time) < 40); } Spiel_Beenden(); return message.wParam; } bool Spiel_Initialisieren(void) { int ret; ret = xxxDDraw_initialisieren(); if (ret == 0) MessageBox(hwnd,"DDraw Fehler","XXX",MB_OK) return true; } bool Spiel_Beenden(void) { xxxDDraw_beenden(); return true; } bool xxxDDraw_initialisieren(void) { HRESULT ddrval; HDC hdc; DDSURFACEDESC2 ddsd; DDSCAPS2 ddscaps; ddrval = DirectDrawCreateEx(NULL, (LPVOID *)&lpDD, IID_IDIRECTDRAW7,NULL); if(ddrval != DD_OK) { return 0; MessageBox(hwnd,"DDraw Fehler: CreateEx()","XXX", MB_OK); } ddrval = lpDD->SetCooperativeLevel(hwnd,DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); if (ddrval != DD_OK) { return 0; MessageBox(hwnd,"DDraw Fehler: CoopLevel()","XXX",MB_OK); } ZeroMemory(&ddsd,sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSDCAPS_FLIP | DDSCAPS_COMPLEX; ddsd.dwBackBufferCount = 1; ddrval = lpDD->CreateSurface(&ddsd,&lpDDSPrimary,NULL); if(ddrval != DD_OK) { return 0; MessageBox(hwnd,"DDraw Fehler: CreateSurf()","XXX",MB_OK); } ZeroMemory(&ddscaps, sizeof(ddscaps)); ddscaps.dwCaps = DDSCAPS_BACKBUFFER; ddrval = lpDDSPrimary->GetAttachedSurface(&ddscaps,&lpDDSBack); if (ddrval != DD_OK) { MessageBox(hwnd,"DDraw Fehler: Attached Surface()","xxx",MB_OK); return false; } xxxDDraw_Puffer_leeren(lpDDSPrimary,255); xxxDDraw_Puffer_leeren(lpDDSPrimary,255); if (lpDDSPrimary->GetDC(&hdc) == DD_OK) { SetBkColor(hdc,RGB(255,0,0)); SetTextColor(hdc,RGB(255,255,0)); TextOut(hdc,380,300,"FRONT",lstrlen("FRONT")); lpDDSPrimary->ReleaseDC(hdc); } if (lpDDSBack->GetDC(&hdc) == DD_OK) { SetBkColor(hdc,RGB(255,0,0)); SetTextColor(hdc,RGB(255,255,0)); TextOut(hdc,380,300,"Back",lstrlen("Back")); lpDDSBack->ReleaseDC(hdc); } return true; } bool xxxDDraw_PufferWechseln(void) { HRESULT ddrval; for(int i = 0;i<100; i++) { xxxMale_Pixel(rand()%800,rand()%600,rand()%256,lpDDSBack); } ddrval = lpDDSPrimary->Flip(NULL,DDFLIP_WAIT); if (ddrval == DD_OK) return true; else if (ddrval == DDERR_SURFACELOST) { ddrval = lpDDSPrimary->Flip(NULL,DDFLIP_WAIT); if (ddrval != DD_OK) return false; return true; } return true; } bool xxxDDraw_Puffer_leeren(LPDIRECTDRAWSURFACE7 LpDDSurf, UCHAR Farbe) { HRESULT ddrval; DDBLTFX ddbltfx; ZeroMemory(&ddbltfx,sizeof(ddbltfx)); ddbltfx.dwSize = sizeof(DDBLTFX); ddbltfx.dwFillColor = Farbe; ddrval = LpDDSurf->Blt(NULL,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&ddbltfx); if ( ddrval != DD_OK) { MessageBox(hwnd,"DDraw Fehler: Puffer_leeren()","XXX",MB_OK); return false; } return true; } bool xxxMale_Pixel(int x, int y, UCHAR Farbe, LPDIRECTDRAWSURFACE7 lpDDSurf) { int Zeilenbreite; UCHAR *vram; DDSURFACEDESC2 ddsd; ZeroMemory(&ddsd,sizeof(ddsd)) ddsd.dwSize = sizeof(ddsd); lpDDSurf->Lock(NULL,&ddsd,DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,NULL) Zeilenbreite = ddsd.lPitch; vram = (UCHAR *)ddsd.lpSurface; vram[x + y+Zeilenbreite] = Farbe; lpDDSurf->Unlock(NULL); return true; } bool xxxDDraw_beenden(void) { if(lpDD != NULL) { if(lpDDSPrimary != NULL) { lpDDSPrimary->Release(); lpDDSPrimary = NULL; lpDDSBack = NULL; } lpDD->Release(); lpDD = NULL; } return true; }
Grüße Julian
-
Hi !
Poste mal den Compileroutput.
Weiterhin würde ich dir raten das #include <ddraw.h> etwas mehr nach oben zu verschieben
-
Hi,
ich habs jetzt gemacht und es geht.
Danke für deine Hilfe. Ich wär schon fast verzweifelt
mfg jube