(erledigt) Fenstergrösse herausfinden: Funktion GetClientRect()



  • Hallöle allerseits!

    Nachdem ich Dank Euch nun erfolgreich meinen Fensterhintergrund erstellen konnte, möchte ich ihn natürlich auch grössenmässig anpassen! Da ich erst seit einigen Tagen dran bin, mit C, C++ und Winapi herumzufummeln, wüsste ich aber gerne, wie ich aus dem Ausgangswert meiner Funktion

    GetClientRect(hwnd, LPRECT);
    

    schlau werde. LPRECT ist offenbar ein Zeiger auf eine RECT-funktion, in der vier Werte stehen, die left, right, top und bottom heissen. Ich möchte die x-Koordinaten und die y-Koordinaten voneinander subtrahieren um die Fenstergrösse herauszufinden und damit meine Funktion

    HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, "test.bmp", IMAGE_BITMAP, 400, 400, LR_LOADFROMFILE);
    

    an der Stelle 400, 400 zu füttern. Da ich ein Anfänger mit der C-Sprache bin, insbesondere mit Zeigern, wüsste ich gerne, wie die korrekte Schreibweise in diesem Fall lautet, um mit Hilfe von GetClientRect() an die Werte von top, left right und bottom zu kommen, denn wenn ich einfach nur

    GetClientRect(hwnd, LPRECT);
    

    schreibe, erhalte ich den Fehler "expected primary expression before ) token", es wird also von mir erwartet, das ich irgendetwas anderes vorm Schliessen der Klammer tue ... 😕

    Hier noch die Links zu den Themen GetClientRect
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms633503(v=vs.85).aspx
    und RECT structure
    http://msdn.microsoft.com/en-us/library/windows/desktop/dd162897(v=vs.85).aspx
    in denen natürlich leider kein Anwendungsbeispiel ist


  • Mod

    Lies am Besten mal ein Tutorial anstatt solche Fragen zu stellen:

    RECT rect;
    GetClientRect(hWnd,&rect);
    

    Das liefert Dir aber nur die Größe. Was willst Du? Die benötigte Größe berechnen? Dann müsstest Du CalcWindowRect benutzten...



  • cyberleon schrieb:

    denn wenn ich einfach nur

    GetClientRect(hwnd, LPRECT);
    

    schreibe, erhalte ich den Fehler "expected primary expression before ) token", es wird also von mir erwartet, das ich irgendetwas anderes vorm Schliessen der Klammer tue ...

    RECT rect;
    int x;
    int y;
    GetClientRect(hwnd, &rect);
    y = rect.top;
    x = rect.left;
    ...
    


  • Belli schrieb:

    RECT rect;
    int x;
    int y;
    GetClientRect(hwnd, &rect);
    y = rect.top;
    x = rect.left;
    ...
    

    Hmmh, welche Werte haben wohl x und y? 🤡



  • Danke, Danke Leute!

    ich war mir unsicher wegen der Schreibweise, nun weiss ich wie ich sie ansteuere!

    Hier der Code, den ich verwendet habe:

    RECT rect;
                    GetClientRect(hwnd, &rect);        // Fenstergrösse herausfinden, um in LoadImage einzufügen
                    // int hoehe = rect.bottom - rect.top;      
                    // int breite = rect.right - rect.left;
                    // HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, "test.bmp", IMAGE_BITMAP, breite, hoehe, LR_LOADFROMFILE);
                    HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, "test.bmp", IMAGE_BITMAP, rect.right - rect.left, rect.bottom - rect.top, LR_LOADFROMFILE);
    

    Natürlich verursacht das mal wieder neue Probleme mit meiner Bitmap, aber das ist nicht mehr Teil dieses Threads - ich werde euch also in ´nem Neuen damit nerven (natürlich erst nachdem ich selbst versucht hab ne Lösung zu finden! ) 😃


Anmelden zum Antworten