Resource laden klappt nicht



  • Hallo!

    Sorry, wahrscheinlich hier zum tausendsten mal,...
    Ich versuche per Resourcen-Datei eine Bitmap zu laden und in meinem Fenster anzuzeigen. Klappt aber nicht, mein Programm gibt mir ständig die Fehlermeldung und zeigt gar nichts an. Was ist denn falsch?

    #include <windows.h>
    
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain (HINSTANCE hI, HINSTANCE hPrI, PSTR szCmdLine, int iCmdShow)
    {
    char szName[] = "Fensterklasse";
    WNDCLASS wc;
    
    wc.style         = CS_HREDRAW | CS_VREDRAW;   // CS = "class style"
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hI;
    wc.hIcon         = LoadIcon (NULL, IDI_WINLOGO);
    wc.hCursor       = LoadCursor (NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH) CreateSolidBrush (RGB(222,0,43));
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = szName;
    
    RegisterClass (&wc);
    
    HWND hwnd = CreateWindow (szName, "WINAPI", WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
                              0, 0, 1024, 768, NULL, NULL, hI, NULL);
    
    ShowWindow   (hwnd, TRUE);
    UpdateWindow (hwnd);
    SetMenu(hwnd, NULL);
    
    // Nachrichten-Schleife
    MSG msg;
        while (GetMessage (&msg, NULL, 0, 0))
        {
            TranslateMessage (&msg);
            DispatchMessage (&msg);
        }
    return msg.wParam;
    }
    
    static HINSTANCE hInstance = NULL;
    
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    HDC hdc;
    PAINTSTRUCT ps;
    static HBITMAP logo;
    
    switch (message)
    {
    case WM_CREATE:
             logo = LoadBitmap(hInstance, "IDB_BITMAP1");
             if(!logo){
                MessageBox(hwnd, "Load of resources failed.", "Error",
                   MB_OK | MB_ICONEXCLAMATION);
             }
    case WM_PAINT:
    
        HDC hdcMemory, hdcWindow;
        BITMAP bm;
    
                hdcWindow = BeginPaint(hwnd, &ps);
                hdcMemory = CreateCompatibleDC(hdcWindow);
    
                GetObject(logo, sizeof(bm), &bm);
    
                SelectObject(hdcMemory, logo);
                BitBlt(hdcWindow, 0, 0, bm.bmWidth, bm.bmHeight, hdcMemory, 0, 0, SRCPAINT);
    
                DeleteDC(hdcMemory);
                EndPaint (hwnd,&ps);
    
        return 0;
    
    case WM_DESTROY:
        PostQuitMessage (0);
        DeleteDC (hdc);
        return 0;
    
    }
          DeleteDC(hdc);
          return DefWindowProc (hwnd, message, wParam, lParam);
    }
    

    gruss
    Bello



  • resource.h



  • Na, eben nicht.

    Meine .rc datei sieht so aus:

    IDB_BITMAP1 BITMAP DISCARDABLE "gfx/klogo.bmp"
    

    Das Logo ist in der exe nach dem compilieren auch enthalten, wie ich an der grösse sehen kann. Es kommt aber beim starten immer zu der Fehlermeldung "load of resource failed"



  • ok, habs jetzt irgendwie hinbekommen



  • logo = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
    


  • @Hepi:
    Das klappt nur, wenn er resource.h einbinden würde.
    Entweder hat er das getan, oder er hat IDB_BITMAP1 in der rc-Datei durch "IDB_BITMAP1" ersetzt.

    @Bello:
    Ein gutgemeinter Rat bei deiner nächsten Frage:
    Bitte poste auch dann deine Lösung, wenn du es selbst hinbekommen hast. Es ist hier üblich auch andere Leute daran teilhaben zu lassen. 🙂



  • ja, das würde ich auch machen, wenn ich nur mal klar wüsste, warum es jetzt funktioniert. Also an der ressource.h kann es nicht liegen, weil ich die jetzt in der neuen version auch nicht einbinden musste. muss wohl im listing oben irgendwas anderes durcheinander geworfen haben.


Anmelden zum Antworten