CSplitterWnd und veränderte Fenstergröße

NinjaOne

Erfahrenes Mitglied
Hallo,
ich hab mir ein CSplitterWnd-Objekt erstellt in dem ich zwei CEditViews aufgenommen habe.
Die beidern Views liegen übereinander.
Das ganze klappt auch soweit.
Jetzt möchte ich nur noch einbauen, daß sich das untere View, bei veränderng der Fenstergröße, immer am unteren Bildschiermrand mit einer konstanten Göße hält.
Das obere Fenster soll den Rest des FDensters füllen.
Doch wie kann ich das machen ?

Würde mich über Forschläge freuen.

Danke, bye.
 
Du kannst dir vom SplitterWnd mit GetPane die Zeiger auf die beiden Views holen. Dann kannst du dir mit GetWindoRect die Größe der View-Rects holen. Und mit diesen Werten ist es kein Problem mehr, die Größe deinen Erfordernissen anzupassen.

Mfg

langer
 
Hi.

Und mit diesen Werten ist es kein Problem mehr, die Größe deinen Erfordernissen anzupassen.

Aber genau das ist mein Problem.
Wie und von welcher Klasse(Doc,View oder Frame) aus muss ich die Werte setzen/verändern?
Und es gibt leider keine SetWindowRect-Funktion um die geänderten Werte zurück zu geben.

Kannst mir etwas mehr erzählen?

Danke,bye
 
Wenn du die Größe deines Fensters änderst, wird von Windows eine Meldung WM_SIZE gesendet. Dafür brauchst du einen Meldungshandler. In dieser Funktion kannst du dir mit
Code:
CMyView1* pView1=(CMyView1*)m_wndSplitter->GetPane(0,0);
den Zeiger auf deine obere View holen. Alternativ dazu mit
Code:
CMyView2* pView2=(CMyView2*)m_wndSplitter->GetPane(1,0);
den Zeiger auf die untere View.
Über diese Zeiger bekommst du mit GetWindowRect(rect) die Koordinaten und Größe.
Nun kannst du die neuen Größen berechnen. Noch einfacher ist es, wenn du die untere View konstant halten willst. Dann brauchst du nur noch die neue Größe für die obere View zu berechnen. Über
Code:
m_wndSplitter.SetRowInfo(0,meineNeueGrosse,meineMinimalGrosse);
m_wndSplitter.SetRowInfo(1,meineFesteGroesse,meineMinimalGroesse);
m_wndSplitter.RecalcLayout();
sollte die neue Grösse eingestellt sein.

Mfg

langer
 
Zurück