korrektes Anordnen von controls nach resize



  • dumme Frage vielleicht, aber eine entsprechende Suche nach obigem Subjekt hat mich nicht wirklich weiter geführt, von daher:

    weiß zufällig jemand einen link zu funktionsfähigem Code der das bewerkstilligt?

    danke!



  • Tja, das ist so eine Sache, da nur du selber weißt, was die korrekte Anordnung ist. Du musst eben WM_SIZE / WM_SIZING abfangen und da dann die neuen Positionen und Größen der Controls berechnen und anschließend entsprechend verschieben.



  • gibt es da denn keine grundformeln für solche berechnungen, die man entsprechend anpassen kann? Meine bescheidenen Versuche sind bisher alle fehlgeschlagen. 😞 Naja, trotzdem danke für die prompte Antwort!



  • Was soll es da für Grundformeln geben 😕 Es gibt ja verschiedene Möglichkeiten:
    - alles prozentual umrechnen
    - immer an einer Kante ausrichten
    - Abstand nach links und rechts konstant halten (quasi Control immer in Fensterbreite)
    - mit einem Control immer einen "Rest"-Platz füllen

    Aber ich weiß auch nicht so genau, was dein Problem ist - ist eigentlich nicht viel mehr außer Prozentrechnung und Division + evtl. Subtraktion 🙄



  • naja, mein Problem ist nicht das Rechnen an sich, sondern eher das Verständnis der Werte. Ich hab keinen Plan wie Bildschirmkoordinaten und Fenster/Client-coordinaten miteinander verknüpft werden sollen. Ich versuchs ma zu erklären, vielleicht hilfts was: Bei dem Dialog mit dem ich grad rumexperimentiere hab ich ein großes Editcontrol in der Mitte und ein paar Buttons unter dem Editcontrol. Wenn ich nun das Fenster verkleinere soll sich natürlich das Editcontrol auch entsprechend anpassen. Ich hab also erstmal die Werte von Clientbereich des Hauptfenster ermittelt und danach die des Editcontrols.

    GetClientRect(hDlg, &hDlgrec); GetClientRect(hEditCtrl, &hEditrc);
    

    und mir die Werte der Strukturen ma probeweise ausgeben lassen und die Daten davon prozentual umgerechnet. Nun gibt mir ja WM_SIZE die neue Größe des Fensters zurück und ich kann damit die Größe des Editcontrols entsprechend anpassen

    double newwWidthClient = LOWORD(lParam)*0.93; double newHeightClient = HIWORD(lParam)*0.86; //(vereinfachte Darstellung!)
    

    Somit hätte ich zwei Werte für die MoveWindow-Funktion, allerdings ist mir immer noch schleierhaft wie nun die neuen Werte von x und y ermitteln soll, in der MoveWindow-Funktion, damit die Abstände zum Rand auch noch passig sind.



  • Naja, dann wohl auch prozentual bzw. eben von der Fensterbreite (Clientbereich) die neue Control-Breite abziehen und durch 2 teilen -> zentriert.



  • ok, habs hinbekommen, nach 12 Stunden dauerfrickeln 😕

    wenn jemand mal ein ähnliches Problem haben sollte:

    BOOL MapDialogRect(
    
        HWND hDlg,	// handle of dialog box
        LPRECT lpRect 	// address of structure with rectangle
       );
    

    ^hier liegt der Hund begraben!

    Trotzdem danke Flenders!


Anmelden zum Antworten