Hallo, hier noch nähere Erläuterungen
auf der Formview erzeuge ich per Code Buttons. Alle Buttons sind gleich groß. Die Breite der Formview entspricht IMMER der Breite eines Buttons. Die Buttons liegen bündig untereinander. Die Höhe der Formview entspricht 'der Höhe eines Buttons*Anzahl aller Buttons'. (Die Formview zeigt also nur die Buttons.
Nun kann es während der Laufzeit vorkommen, dass nicht alle Buttons gebraucht werden. Deshalb verstecke ich dann die Buttons, die überflüssig sind. In diesem Fall soll sich dann die Höhe der Formview der aus 'der Höhe eines Buttons*Anzahl aller SICHTBAREN Buttons' ergeben (das ist unter anderem notwendig, damit eine überflüssige Scrollbar der Formview verschwindet).
Für alle die ICQ kennen: es ist eigentlich das selbe Prinzip wie das der Contact-List: übersteigt die 'Höhe*Anzahl der Contacts' die Höhe der Liste, so wird ein horizontaler Scrollbalken angezeigt. Veringert sich die Anzahl der sichtbaren Contacts wieder ('Höhe*Anzahl der Contacts' < Höhe der Contact-List), so verschwindet der horizontale Scrollbalken (d.h. die Höhe der Liste (in meinem Fall wäre das die Höhe der Formview) passt sich zur Laufzeit an).
Und so habe ich es bisher versucht:
int CMyFormView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
...
// Buttons erzeugen
...
// neue Höhe setzen, damit alle Buttons sichtbar sind
// (hier funktioniert es noch)
SetWindowPos(NULL,0,0,nKonstBreite,
nButtonHöhe*nButtonAnzahl,SWP_NOMOVE);
...
}
Nach Verstecken von Buttons rufe ich dann folgende Methode auf:
void CMyFormView::HöheAnpassen(nSichtbareBtns)
{
// hier stürzt er zwar nicht ab,
// es tut sich aber auch nichts an der Höhe
SetWindowPos(NULL,0,0,nKonstBreite,
nButtonHöhe*nSichtbareBtns,SWP_NOMOVE);
}