JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Problem beim erstellen eines Surface aus Resource
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 29.03.2003, 15:53    Titel: Problem beim erstellen eines Surface aus Resource Antworten mit Zitat

Also, wenn ich mein Programm starte kommt kurz ein schwarzer Bildschirm und dann geht das programm wieder aus...

im der Log Datei steht dann:

Zitat:
Fehler beim Laden eines Bildes
Programmfehler, Programm wurde beendet


Die Funktion zum laden des Bildes:
Code:
LPDIRECTDRAWSURFACE7 CreateSurfaceFromResource(int BILD_ID, int breite, int hoehe)
{
   // Device Contect für das Bild und die Oberfläche
   HDC hBmDC,hSurfDC;

   // Handle des Bildes
   HBITMAP hBM;

   // Oberflächenbeschreibung
   DDSURFACEDESC2 SurfDesc;

   // Zeiger auf die Oberfläche
   LPDIRECTDRAWSURFACE7 lpDDSurface;
   
   // Bild Laden
   hBM = LoadBitmap(FensterInstanz,MAKEINTRESOURCE(BILD_ID));

   // Ist ein Fehler während des ladens aufgetreten ?
   if(NULL == hBM)
   {
      Log("Fehler beim Laden eines Bildes");
      Log(ENDE);
      return NULL;
   }

   // Oberflächenbeschreibung initialisieren
   ZeroMemory(&SurfDesc, sizeof(SurfDesc));
   SurfDesc.dwSize = sizeof(SurfDesc);

   // Caps, Höhe und Breite sollen berücksichtigt werden
   SurfDesc.dwFlags =   DDSD_CAPS   |
                  DDSD_HEIGHT   |
                  DDSD_WIDTH   ;

   SurfDesc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
   SurfDesc.dwWidth = breite;
   SurfDesc.dwHeight = hoehe;

   // Oberfläche anlegen
   if(FAILED(lpDD7->CreateSurface(&SurfDesc,&lpDDSurface,NULL)))
   {
      Log("Fehler beim Anlegen einer Bildoberfläche");
      Log(ENDE);
      return NULL;
   }

   // Device Context der oberfläche holen
   lpDDSurface->GetDC(&hSurfDC);

   // Kompatiblen Device Context für das Bild anlegen
   hBmDC = CreateCompatibleDC(hSurfDC);

   // Bild in Device Context holen
   SelectObject(hBmDC,hBM);

   // Bild in die Oberfläche kopieren
   BitBlt(hSurfDC,0,0,breite,hoehe,hBmDC,0,0,SRCCOPY);

   // Device Context freigeben
   lpDDSurface->ReleaseDC(hSurfDC);

   // Device Context und Bild löschen
   DeleteDC(hBmDC);

   // Grafik löschen
   DeleteObject(hBM);

   // Zeiger auf die Oberfläche zurückgeben
   return lpDDSurface;
}


So lade ich das Bild dann gleich nach der Direct X inititalisierung:
Code:
lpMainMenu = CreateSurfaceFromResource(IDB_HAUPTMENU,1024,768);


Und meine Render Funktion sieht so aus:

Code:
BOOL Render(void)
{
    DDBLTFX BlitFX;
    ZeroMemory(&BlitFX,0);
    BlitFX.dwSize = sizeof(BlitFX);

    // Hintergrundfarbe setzen
    BlitFX.dwFillColor = BackgroundColor;

    // Puffer löschen
    if(FAILED(lpDDSBackBuffer->Blt(NULL,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&BlitFX)))
   {
      return FALSE;
   }
    if(FAILED(lpDDSBackBuffer->BltFast(0,0,lpMainMenu,NULL,DDBLT_WAIT)))
   {
      return FALSE;
   }
    // Puffer anzeigen
    lpDDSPrimary->Flip(NULL,DDFLIP_WAIT);

   return TRUE;
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 29.03.2003, 16:03    Titel: Antworten mit Zitat

hBM = LoadBitmap(FensterInstanz,MAKEINTRESOURCE(BILD_ID));
gibt eine boolesiche Variable und kein Handle zurück.

Zitat:
CBitmap::LoadBitmap
BOOL LoadBitmap( LPCTSTR lpszResourceName );

BOOL LoadBitmap( UINT nIDResource );

Return Value

Nonzero if successful; otherwise 0.

_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 47
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 29.03.2003, 16:46    Titel: Antworten mit Zitat

JJ benutzt LoadBitmap schon richtig, es ist die GDI Funkion. Es muss also an was anderem liegen. Ist FensterInstanz korrekt? Ist die Resource richtig eingebunden?

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 29.03.2003, 17:35    Titel: Antworten mit Zitat

Aber wie wird denn hBM ohne type-cast in ein Handle umgewandelt Embarassed
Geht des automatisch?
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 29.03.2003, 17:56    Titel: Antworten mit Zitat

hBM ist doch ein Handle. HBITMAP ist ein Handle zu einer Bitmap. :)
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 29.03.2003, 17:59    Titel: Antworten mit Zitat

Aber wenn doch die Funktion LoadBitmap eine boolesiche Variable zurückgibt...
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 29.03.2003, 18:34    Titel: Antworten mit Zitat

guck nochmal in der MSDN, da gibts es bei mir drei mal LoadBitmap...
zwei mal mit so nem Kram davor und dann einmal des aus der GDI...

Also, zu meiner FensterInstanz...

Ich hab die einmal in ner Headerdatei deklariert..

Code:

HINSTANCE FensterInstanz;


Und es ist ja wohl die von meinem Fenster, und wenn da

Zitat:

[...]
int WINAPI WinMain(HINSTANCE FensterInstanz,
HINSTANCE vorherigeInstanz,
LPSTR lpCmdLine,
int nCmdShow)
[...]


HWND CreateMainWindow(HINSTANCE FensterInstanz)
[...]
steht, oder seh ich da was falsch?

Zu der Resource...
Die resourcen datei hab ich dem Resourcen Ordner hinzugefügt und die automatisch erstellte Headerdatei hab ich auch mit eingebunden, also dadran dürfte es auch nicht liegen...+



[Edit]
ich habe grad noch sowas gefunden:

Code:
hInstance = ((LPCREATESTRUCT) lParam)->hInstance;
muss ich das vielleicht mit einbringen?

Ich habs grad mal probiert, aber da Stand dann nur das lParam nicht bekannt ist und das FensterInstanz nicht von LPCREATESTRUCT ist...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 29.03.2003, 18:43    Titel: Antworten mit Zitat

The Lord of Programming hat Folgendes geschrieben:
Aber wenn doch die Funktion LoadBitmap eine boolesiche Variable zurückgibt...


Tut sie doch nicht. Ließ mal was Christian geschrieben hat. ;)

MSDN:
Zitat:

HBITMAP LoadBitmap(
HINSTANCE hInstance, // handle to application instance
LPCTSTR lpBitmapName // address of bitmap resource name
);

_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 47
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 29.03.2003, 19:11    Titel: Antworten mit Zitat

@DerJJ:

Weiss du die Variable auch mal zu? Alleine durch
Code:

HINSTANCE FensterInstanz = 0;

int WINAPI WinMain(HINSTANCE FensterInstanz,
HINSTANCE vorherigeInstanz,
LPSTR lpCmdLine,
int nCmdShow)
{
}


void AndereFunktionDieFensterInstanzNutzt()
{
    // hier ist FensterInstanz immer noch gleich 0, weil es 2 verschiedene Variablen sind

}


mach lieber sowas:

Code:

HINSTANCE g_FensterInstanz = 0;

int WINAPI WinMain(HINSTANCE FensterInstanz,
HINSTANCE vorherigeInstanz,
LPSTR lpCmdLine,
int nCmdShow)
{
    g_FensterInstanz = FensterInstanz,

   .....
}




Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 29.03.2003, 20:21    Titel: Antworten mit Zitat

sry
hab mich vertan und hab nur den ersten Eintrag in der MSDN gelesen Embarassed Rolling Eyes
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 31.03.2003, 15:34    Titel: Antworten mit Zitat

Also, ich hab das jetzt so gemacht wie das Cristian gesagt hat,
aber...

wenn ich das Programm ausführe hab ich ein graues Bild, genauso wie nachdem das Programm minimiert und wieder maximiert wurde,
aber gleich nach dem Start...
Und ne Fehlermeldung hab ich garkeine!
(in meiner Log Datei)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 01.04.2003, 15:17    Titel: Antworten mit Zitat

Zeig doch mal den Initialisierungs code für DirectDraw.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 02.04.2003, 14:18    Titel: Antworten mit Zitat

Hier:
Code:
/****************************
* DirectDraw initialisieren *
****************************/
int InitDirectDraw(void)
{
   if(FAILED(hRes = DirectDrawCreateEx(NULL,(void**)&lpDD7,IID_IDirectDraw7,NULL)))
   {
      // Direct Draw Object für Win 95 anlegen
      DirectDrawCreate(NULL,&lpDD,NULL);

      // DirectDraw7 Schnittstelle des  DirectDraw-Objects abfragen
      // und einen Zeiger auf diese Schnittstelle in lpDD7 speichern
      hRes = lpDD->QueryInterface(IID_IDirectDraw7,(void**)&lpDD7);

      // DirectDraw-Objekt freigeben
      lpDD->Release();
   }

   if(FAILED(hRes))
   {
      Log("DirecDraw7 Schnittstelle nicht verfügbar");
      Log(ENDE);
      return FALSE;
   }
   else
      Log("DirectDraw7 Schnittstelle erfolgreich angelegt");
 

    // Kooperationsebene setzen
    if(FAILED(lpDD7->SetCooperativeLevel(hWnd,DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN)))
    {
        Log("Fehler beim Setzen des Kooperationsebene");
      Log(ENDE);
      return FALSE;
    }
   else
      Log("Kooperationsebene erfolgreich gesetzt");

    // Auflösung und Farbtiefe setzen
    if(FAILED(lpDD7->SetDisplayMode(SCR_WIDTH,SCR_HEIGHT,COLOR_DEPTH,0,0)))
    {
        Log("Fehler beim Setzen des Kooperationsebene");
      Log(ENDE);
      return FALSE;
    }
   else
      Log("Auflösung erfolgreich gesetzt");

    // Struktur zur Beschreibung einer Oberfläche
    DDSURFACEDESC2 ddsd;

    // Initialisieren und Größe festlegen
    ZeroMemory(&ddsd,sizeof(ddsd));
    ddsd.dwSize = sizeof(ddsd);
   
    // Die Angabe wdCaps soll berücksichtigt werden
    ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
   
    // Es soll eine primäre Oberfläche angelegt werden
    ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX;
   
    // Es soll ein Puffer angelegt werden
    ddsd.dwBackBufferCount = 1;

    // Oberfläche anlegen
    if(FAILED(lpDD7->CreateSurface(&ddsd,&lpDDSPrimary,NULL)))
    {
        Log("Fehler beim Anlegen der primären Oberfläche");
      Log(ENDE);
      return FALSE;
    }
   else
      Log("Primäre Oberfläche erfolgreich angelegt");
 
    ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;

    if(FAILED(lpDDSPrimary->GetAttachedSurface(&ddsd.ddsCaps,&lpDDSBackBuffer)))
    {
        Log("Fehler beim Anlegen des Puffers");
      Log(ENDE);
      return FALSE;
    }
   else
      Log("Puffer wurde erfolgreich angelegt");
   
    return TRUE;
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 03.04.2003, 14:37    Titel: Antworten mit Zitat

Hmm...
da weiß ich auch nich weiter. Confused
Ich hab selbst noch nie Surfaces mithilfe von Resourcen benutzt, sondern verwende meine Sprites immer extern.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 03.04.2003, 18:40    Titel: Antworten mit Zitat

Also, das Programm funzt ich kann auch die Hintergrundfarbe von scharz auf blau stellen, aber diese verkaggte Bild wird nicht angezeigt, und ne Fehlermeldung bekomm ich auch nicht....

Wenn wer sich das mal genauer angucken will, dann kann ich das Projekt ja mal uppen...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum