bitmap aus resource fehler



  • hi,
    ich bin am verzweifeln. 😞 ich hab jetzt schon 2 lange tage nach dem fehler in meinem programm gesucht, aber ihn nicht gefunden. 😡
    ich möchte 'ne bitmap aus einer resoucre laden.
    hier mein code (auszugweise):

    //header.h
    #define IDB_TEST    501
    
    //resourcen.rc
    IDB_TEST BITMAP DISCARDABLE "pixels.bmp"
    
    LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
        PAINTSTRUCT ps;
        HDC hDC, hdcMem;
        LPSTR str;
        static HBITMAP  hBitmap;
        static BITMAP   bitmap;
    
        switch(msg) {
    
            case WM_PAINT:
    
                //hBitmap = (HBITMAP)LoadImage (hInstance, MAKEINTRESOURCE(IDB_TEST),IMAGE_BITMAP,16,16,LR_DEFAULTCOLOR);
                hBitmap = LoadBitmap(hInstance, KARO_2);
                GetObject (hBitmap, sizeof(BITMAP), &bitmap);
                hDC = BeginPaint (hWnd, &ps);
                wsprintf(str, "Aktuelle Karte: %i", iAktuelleKarte);
                TextOut(hDC, 10, 10, str, strlen(str));
                hdcMem = CreateCompatibleDC(hDC);
                SelectObject(hdcMem, hBitmap);
                BitBlt(hDC, 0, 0, bitmap.bmWidth, bitmap.bmHeight, hdcMem, 0, 0, SRCCOPY);
                DeleteDC(hdcMem);
                EndPaint(hWnd, &ps);
                GetLastErrorEx();
    

    so weit so gut. compileren ohne probleme. nur anzeigen tut er nichts. 😞
    GetLastError sagt: "Der angegebene Ressourcenname wurde nicht in der Image-Datei gefunden."
    aber die bitmap wurde als resource hinzugefügt. das weiß ich, weil ich ein tool hab, das die resourcen eines (win32-)programms anzeigt und da ist die bitmap (eien SpielKarte) eindeutig drin.

    ich bin für jede hilfe dankbar, und wenns nur ein ansatz ist, oder eine idee, *biiiiteehee*

    lw



  • Das ist schon mal sehr schön, daß Du GetLastError() verwendet hast. Aber vielleciht hättest Du diese Prüfung drin lassen sollen. Wo passiert denn der Fehler? Direkt nach LoadBitmap()? Liefert LoadBitmap() überhaupt was zurück? Oder kommt da NULL zurück?



  • //resourcen.rc
    IDB_TEST BITMAP pixels.bmp

    hBitmap = (HBITMAP)LoadImage (hInstance, IDB_TEST,IMAGE_BITMAP,16,16,LR_DEFAULTCOLOR);

    versuchs mal so
    btw... läuft das spiel im fenster?



  • hi,
    wer hat's erraten? king hatte mal wieder recht. LoadBitmap() gibt tatsächlich NULL zurück. 😮
    GetLastError() rufe ich übrigens da auf, wo GetlastErrorEx(); steht. 🙄 ... (selbst geschriebne Funktion, gibt MessageBox mit Fehler aus)
    danke soweit erstmal, aber woran kann das liegen, oder was mache ich falsch? 😕

    @Sovok:
    die resourcen nimmt er so, aber bei LoadImage() weigert er sich zu compileren, irgendwas wie "cannot cast from 'int' to 'const char *'" oder so, naja: schade eigentlich. 😞

    PS: das programm hängt sich jetzt übrigens in einer endlosschleife auf, seitdem ich LoadBitmap() auf den Rückgabewert überprüfe... 😞



  • Müsste es nicht so heißen:

    hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(KARO_2));
    


  • Kleine Ergänzung zu flenders:
    Wenn Du GetLastError() erst ganz am Ende aufrufst, kannst Du durchaus den ErrorCode einer anderen Funktion zurückbekommen (diese werden ohne gültiges Bitmap fehlschlagen und den ErrorCode überschreiben). Willst Du Dir den ErrorCode von LoadBitmap ansehen, muß der Aufruf von GetLastError direkt danach erfolgen:

    if(NULL == (hBitmap = LoadBitmap(hInstance, KARO_2)))
    {
        GetLasterrorEx();
        break;
    }
    


  • hatte bis eben das gleiche problem.
    dank kwotx bin ich drauf gekommen, dass der fehler durch ein falsches hinstance zustande kam..



  • ich danke euch. es geht jetzt. *juchuuuu* 🙂 😃 🙂
    ich hab alle eure ratschläge befolgt, eine (neue) globe variable hInst deklariert, diese in WinMain dann auf die von windows übergebene hInstance gesetzt und das MAKEINTRESOURCE-Makro verwendet, was erst nicht geholfen hat.

    nochmals ein großes thanks an alle, die mir geholfen haben.
    ich hoffe, dass ich die WinApi eines Tages auch so gut beherrsche, damit ich auch anderen mal eine hilfe sein kann, und nicht immer nur der fragen-steller.


Anmelden zum Antworten