Größe anpassen von TabControl und RichEdit

budili

Mitglied
Moin Leute,

ich habe ein Fenster in dem ich ein TabControl und ein RichEdit habe.
Wenn ich nun das Fenster verkleinern mag, dann sollten die beiden
Komponenten sich dem neuen Fenster anpassen und auch kleiner werden
und evtl ne Scrollbar hinzufügen etc.

Kann mir jemand sagen wie das geht
 
Hi budili,

füge doch für deine Fensterklasse einen Eventhandler für die WM_SIZE Message ein.

Dort bekommst du die neue Größe des Clientbereichs übergeben und aufgrund der neuen Größe kannst du den Inhalt neu ausrichten.

Sieht in etwa so aus:

Code:
void MyWnd::OnSize(UINT nType, int cx, int cy)
{
    CWnd::OnSize(nType, cx, cy);
    // Hier kannst du deine Controls an die neue Fenstergröße anpassen
    // z.B. myRichEdit.SetWindowPos(.....)
}

Wenn du mehrere Fenster/Controls neu positionieren möchtest, solltest du die Funktionen BeginDeferWindowPos(), DeferWindowPos() und EndDeferWindowPos() verwenden, da es so sehr viel weniger flackert ;-)

Viel Erfolg,

Peter
 
hm Danke dir schon mal.

Aber ich weiß doch gar nicht, wie der Anwender das Fenster vergrößert bzw. verkleinert,
deshalb kann ich ja auch nicht z.B. die Parameter cx und cy der Funktion OnSize
bestimmen ... oder denke ich da ganz in ne andere Richtung

P.S. ich mache das mit C# :suspekt:
 
Hi,

ok, das Beispiel ist zwar C++/MFC, aber der Mechanismus ist derselbe.

Du hast einen Eventhandler für dein Fenster.

Wie die Größe des Fenster verändert wurde (Maximieren, untere rechte Ecke ziehen, setzen im code per MoveWindow() ) sollte dir egal sein.

Du arbeitest nur mit den aktuellen Dimensionen, die dieses Fenster dann hat. und die der Eventhandler dir übergibt.

Dann positionierst du die Controls dementsprechend.

Versuchs mal..

Gruß,

Peter
 
Zuletzt bearbeitet:
Hi nochmal,

habe gerade ein Testprojekt gemacht.

In dem habe ich eine Form1, auf welchem sich 2 Buttons (btn1 && btn2) befinden.

Für die Form1 habe ich für Resize den Eventhandler Form1_Size hinzugefügt.

Code:
        private void Form1_Size(object sender, EventArgs e)
        {
            int w = Width;
            int h = Height;

            btn1.SetBounds(0, 0, w / 2, h);
            btn2.SetBounds(w / 2, 0, w / 2, h);

        }

Nun füllen die beiden Buttons horizontal immer genau 50% des Fenstern aus, egal wie die Größe zustande gekommen ist!

Das ist es doch, was du wolltest, oder ?

Viel Spaß weiterhin,

Peter
 
hmm ich habe jetzt einfach mal deinen Code:

Code:
            int w = Width;
            int h = Height;

            btn1.SetBounds(0, 0, w / 2, h);
            btn2.SetBounds(w / 2, 0, w / 2, h);

in die Resize Funktion eingefügt ... so hast du das gemeint oder
t soweit auch glaube ich :suspekt:

Eventhandler ist doch allg. wenn ein Event oder irgendwas mit der Anwendung passiert oder? ich muss ja nicht noch zusätzlich da was noch einfügen ...

Aber Danke schon mal, hast mir weiter geholfen.

Noch ne andere Frage :suspekt:

Weißt du vielleicht wie man Schaltflächen per Mausklick raus- und reinschieben kann.
Also z.B. ich hab nen TabControl links im Fenster und wenn ich da meine
Einstellungen getätigt habe, will ich diesen Bereich per Mausklick einfach
weg geschoben haben und später wenn ichs wieder bräuchte rausholen ...

Hört sich ziemilch doof an, aber ich weiß nicht genau, wie ich das erklären soll.

Ah wie z.B. im Startmenü, wenn man auf Start-->Programme klickt, dann erscheint ja
das Menü und Windows blendet ja auto. die nicht benutzen Menüs aus.
Wenn man unten auf den Pfeil klickt, dann tauchen sie aber wieder auf,
sowas hätte ich gerne ;D
 
Zuletzt bearbeitet:
Hi budili,

ganz ehrlich, wenn du noch nicht genau weisst, was ein Eventhandler ist, solltest du solche faxen so lange nach hinten schieben, bis du das Windows-Nachrichtensystem und die entsprechenden Controls voll im Griff hast.

Soll wirklich nicht abwertend gemeint sein! Aber das wichtigste meiner Meinung nach ist die Basis wirklich zu verstehen, auf dem das ganze aufgebaut ist!
Und das lernst du am besten, wenn du dich am Anfang an die Standardcontrols hälst.

Du kannst jede Funktionalität so oder so erzeugen.

Warum hälst du dich nicht erst mal an Standarddialoge, welche du auf Button-Klicks modal darstellst, deren Einstellungen in deine App übernimmst und so weiterarbeitest.

Die Funktionalitäten eines Programmes sollten immer an erster Stelle stehen!
Die optischen Spielereien (auf die ich auch ungemein abfahre und herausfinden möchte) kannst du dann, wenn du genug Zeit über hast, immer noch einbauen ;-)

Also nix für ungut, wenn ich darauf nicht näher eingehe.

Bis zum nächsten Posting,

Peter
 
Da gebe ich dir schon Recht, aber ich kann ja nix lernen, wenn ich niemanden
Frage oder was ausprobiere oder !! Wenn man immer nur das tut, was man
schon sowieso kann, dann kommt man im Leben nicht weiter !!

Und ich lerne lieber was neues, bevor ich immer das selbe mache.
Arbeite jetzt mit dem MS Visual Studio zum ersten mal, habe vorher den Borland
benutzt. Und dein Beispielprogramm mit den Buttons lief bei mir ja auch.

Ich bin grad in meinem Projekt an dem Punkt, wo ich das Design der Software
erstellen muss. Und der Rest ist erstmal nebensächlich.
 
Hi,

auch richtig, aber mache nicht den Fehler, solch optischen Schnickschnack in einem Projekt von vornherein mit einzuplanen, bzw. anzubieten, da der Nutzen den Aufwand meistens nicht rechtfertigt.

An deiner Stelle würde ich versuchen, bei http://www.codeproject.com oder http://www.codeguru.com ein fertiges Control zu finden, was deinen Wünschen annähernd entspricht und modifiziere dieses dann nach deinen Wünschen.

Das sollte dir viel Zeit und Nerven sparen ;)

Weiterhin viel Erfolg,

Peter
 

Neue Beiträge

Zurück