splitterWnd mit 3 Fenstern?

jokey2

Erfahrenes Mitglied
Hallo Leute!

Ich habe eine Anwending mit einem 2-teiligen SplitterWnd, der Teiler unterteilt in einen linken und einen rechten Teil. Soweit ist auch alles in Ordnung. Nur möchte ich gerne ein drittes Fenster mit einer Textausgabe quer unter die beiden oberen Fenster anbringen. Muß ich dafür die ganze Fensterstruktur ändern oder gibt es eine einfachere Möglichkeit. CSplitterWnd unterstützt anscheinend nur tabellenförmige Unterteilungen.

Danke und Grüße,

jokey2
 
Du kannst aber einen Splitter in einem Splitter anlegen, also zuerst die äussere Aufteilung (Textzeile unten, ein Feld oben). In das Feld oben legst du dann einen zweiten Splitter an, der deine jetzige Aufteilung enthält. Fettich.
 
Wenn das , dann wär's wunderbar. Ich werde es mal ausprobieren. Auf jeden Fall ein dickes DANKE!

Bis zum nächsten Mal,

jokey2
 
Ich hab's jetzt ausprobiert, hab's aber nicht hingekriegt!
Nachdem ich den ersten Splitter angelegt habe, muß ich ja erst mal die Panes initilalisieren (mit CreateView(...)). Was soll ich dem da als RUNTIME_CLASS angeben?
Ich hab's auf mehrere Arten versucht, mit verschiedenen Views und eigenen, abgeleiteten Views, hat aber nicht hingehauen.
Den CWnd* von GetPane(1,0) habe ich dann an den 2. Splitter als Parent übergeben.
Ich wäre sehr dankbar für ein kleines Schnipselchen Code, aus dem ersichtlich ist, wie 2 ineinander geschachtelte Splitter erzeugt werden.

Schon mal Danke,

jokey2
 
Erstmal Danke für die Tipps, ich hab' das Tutorial von gamedev.net verwendet, weil ich mit Standard MFC-Klassen arbeiten wollte (bitte nich böse sein, basd ;-)).
Allerdings habe ich noch eine weitere Frage betreffend CSplitterWnd: Gibt es eine Möglichkeit, die Splitter festzuhalten, d.h. so einzustellen, daß der Anwender sie nicht verschieben kann? Oder muß ich das dann über die OnSize-Messages machen?

Greez,
jokey2
 
...und noch ne Frage: Was muß ich tun, um über eine Verschiebung des Splitters benachrichtigt zu werden?

Grüße,
jokey2
 
Zum Verhindern des Verschiebens: Da müsste ein EnableWindow( FALSE ) eigentlich reichen, habe ich aber nicht getestet.

Da die CSplitterWnd-Klasse eine reine MFC-Code-Klasse ist (also kein Windows-Control kapselt), haben sich die Programmierung um eine Benachrichtigung gedrückt. Es sind aber eigentlich alle Funktionen virtuell, so dass du eine Klasse ableiten kannst und dort auf die Ereignisse reagieren:

StartTracking überschreiben, drin die Basisklasse aufrufen, und wenn danach IsTracking TRUE zurückgibt, wurde Tracking gestartet.
Mit OnMouseMove dasselbe, wenn IsTracking TRUE ist, dann wird gedragged.
Etwas umständlich, aber machbar.

Andersrum, du bekommst am Ende des Drag-Vorganges ja ein WM_SIZE an beide Child-Fenster, reicht das nicht?
 
Das mit EnableWindow(FALSE) habe ich gleich ausprobiert, und siehe da - es klappt, die Splitter sind nicht mehr verschiebbar. Damit brauche ich ja die Benachrichtigung nicht mehr.
Ich habe jetzt ein dreigeteiltes Fenster (etwa wie im VS, nur ohne docking) 2 oben und eines unten quer für Ausgaben. Die Splitter sind nicht mehr verschiebbar und wenn ich die Fenstergröße ändere, bleibt das rechte obere Fenster fest bei seiner Größe und die anderen beiden passen sich der neuen Größe an. Und das alles Dank Deiner Hilfe. Ist eigentlich gar nicht so kompliziert, wenn man mal weiß, wie's geht ;-).
Also nochmal vielen Dank,

jokey2
 

Neue Beiträge

Zurück