Buttons richtig platzieren



  • Hallo erstmal,

    jaa ich hab ein problem mit der WinAPI, nämlich, dass mein Fenster mit dem klassischen Windows Style anders aussieht als mit dem XP Style.

    Das liegt wahrscheinlich daran, dass diese Programmierer bei Windows die Funktion
    CreateWindowEx(); so ******* programmiert haben, dass die Länge und Breite des Fensters nicht dem eigentlichen Inhalt entspricht, sondern die Statusleiste(oder wie das heißt, eben das Dingens mit dem Kreuz oben rechts)mitgezählt wird. Und da die beim klassischen Windows Style eben niedriger ist, haut das alles nicht hin.

    Hat jemand eine Lösung für das Problem?

    MFG
    baugrube187



  • Oh, hab vergessen zu schreiben, worumn es eigentlich geht.
    Es geht darum, dass, wie im Titel schon angedeutet, bei meinen Buttons der Abstand zum unteren Rand beim klassischen Windows Style größer ist als beim XP Style.



  • Also da gibt es zwei Größen von ein und denselbem Fenster:
    -Die Fenstergröße selbst (komplett mit Titelleiste, Menüleiste)
    -Die sog. Zeichenfläche selbst, diese nennt sich "Client-Bereich"

    Was Du vermutlich brauchst ist sicherlich die Größen und Position des Client-Bereichs. Und nicht die des gesamten Fensters.

    Egal was für Windows-Style gerade eingestellt ist, die Client-Koordinaten sind immer richtig.
    Das bedeutet zwangsläufig auch, daß die Größe des Client-Bereichs nicht immer die gleiche ist wenn man die Windows-Style umschaltet (bei gleichbleibender Gesamt-Fenstergröße).

    Martin



  • Das is genau das was ich suche, aber wie efinier ich denn diese Clientheight und width ?

    Ich hab zur Zeit diesen Code
    hwnd = CreateWindowEx
    (
    WS_EX_APPWINDOW,
    "ClassTestWindow",
    "Testwindow,
    WS_CAPTION,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    128, // hier
    144, // und hier
    HWND_DESKTOP,
    NULL,
    hThisInstance,
    NULL
    );



  • mist!!
    hier nochmal formatiert

    hwnd = CreateWindowEx
    (
    WS_EX_APPWINDOW,
    "ClassTestWindow",
    "Testwindow,
    WS_CAPTION,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    128, // hier
    144, // und hier
    HWND_DESKTOP,
    NULL,
    hThisInstance,
    NULL
    );
    


  • Schau dir mal AdjustWindowRectEx an.



  • Danke,
    fubnktioniert aber irgendwie immer noch nicht richtig.

    RECT xysize = {0, 0, 122, 112};
        int winstyles = WS_CAPTION;
        int winstylesex = WS_EX_APPWINDOW;
    
        AdjustWindowRectEx(&xysize, winstyles, false, winstylesex);
    
    	hwnd = CreateWindowEx
    	       (
    	           winstylesex,     
    	           szClass,    
    	           szWindow,     
    	           winstyles,
    	           CW_USEDEFAULT,    
    	           CW_USEDEFAULT,   
    	           xysize.right,  
            	   xysize.bottom,                	           
                       HWND_DESKTOP,       
    	           NULL,             
    	           hThisInstance,       
    	           NULL              
    	       );
    


  • Schon wieder was vergessen 😞

    Auf jeden Fall ist der Clientbereich so statt 122x112 nur 120x90 Pixel groß



  • So, account erstellt, jetzt kann ich endlich meine Beiträge editieren 😃

    Naja, auf jeden Fall ist mir gerade aufgefallen, dass die von AdjustWindowRectEx ausgegebene Länge und Breite bei allen Windows Styles gleich ist.

    /edit: Ahhh ich bin so doof, man muss doch noch die anderen beiden Punkte davon abziehen.... Jetzt gehts endlich! Danke für die Tipps!

    Für alle die noch ein Problem damit haben:

    xysize.right - xysize.left,
                   xysize.bottom - xysize.top,
    

    Das muss rein anstatt der Pixelanzahl.


Log in to reply