Thread View: de.comp.lang.c++
4 messages
4 total messages
Started by Hans-Dirk Flaechsig
Thu, 11 Jan 1996 12:07
visual c++ und Fenstergroesse
Author: Hans-Dirk Flaechsig
Date: Thu, 11 Jan 1996 12:07
Date: Thu, 11 Jan 1996 12:07
18 lines
1087 bytes
1087 bytes
Hi! ich habe ein (hoffentlich) kleines Problem bei Visual C++. Ich moechte einen FormView verwenden, der nur eine Listbox oder aehnliches enthaelt. Beim veraendern der Fenstergroesse sollte dieser sich dann anpassen. Fuer den Anfang wuerde es mir reichen, wenn ich die Listbox an den Fensterrahmen 'anheften' kann. Was sonst noch interessant waere ist die Beschreibung ueber eine relative Position (also 30% vom linken Rand oder so aehnlich. Wenn jemand von Euch also weiss, wie man so etwas unter VC++ 2.0 realisiert, waere ich fuer eine Mail dankbar. Ach ja, die Frage mag dumm klingen, aber ich arbeite noch nicht lange mit dem System. Bis die Tage hans hdf@hni.uni-paderborn.de C
Re: visual c++ und Fenstergroesse
Author: Uwe Tantz
Date: Fri, 12 Jan 1996 11:35
Date: Fri, 12 Jan 1996 11:35
44 lines
2212 bytes
2212 bytes
On 11 Jan 1996, Hans-Dirk Flaechsig wrote:
> Hi!
>
> ich habe ein (hoffentlich) kleines Problem bei Visual C++. Ich moechte einen FormView verwenden, der nur
> eine Listbox oder aehnliches enthaelt. Beim veraendern der Fenstergroesse sollte dieser sich dann anpassen.
> Fuer den Anfang wuerde es mir reichen, wenn ich die Listbox an den Fensterrahmen 'anheften' kann. Was
> sonst noch interessant waere ist die Beschreibung ueber eine relative Position (also 30% vom linken Rand oder
> so aehnlich.
>
> Wenn jemand von Euch also weiss, wie man so etwas unter VC++ 2.0 realisiert, waere ich fuer eine Mail dankbar.
> Ach ja, die Frage mag dumm klingen, aber ich arbeite noch nicht lange mit dem System.
>
> Bis die Tage
>
> hans
>
> hdf@hni.uni-paderborn.de
>
Automatisch kriegst Du das leider nicht geregelt! Du musst den WM_SIZE
handler Deines FormViews ueberschreiben und die Groesse Deiner Listbox
selbst anpassen.
Das ganze muesste etwa so aussehen: (Ich habe auf der Sun leider keine
MFC-Hilfe verfuegbar, mach mich also bitte nicht fuer Pointer-Referenzen-
Verwechslung u. ae. haftbar...)
...
CMyForm::OnSize (...)
{
CFormView::OnSize();
CRect r;
GetWindowRect (&r);
m_Listbox.SetWindowPos (NULL, 0, 0, r.Width(), r.Height(),
SWP_NOZORDER | SWP_NOMOVE);
}
Ich habe mir fuer solche Zwecke einen View geschrieben, der in
OnInitialUpdate die Koordinaten aller child-windows in einem Array
registriert, und bei OnSize selbst alle Children anpassen kann. Das
klappt ganz gut.
Tschuess...
Uwe
uwe.tantz@physik.uni-regensburg.de
Re: visual c++ und Fenstergroesse
Author: Robert Seidner
Date: Fri, 12 Jan 1996 21:27
Date: Fri, 12 Jan 1996 21:27
79 lines
3182 bytes
3182 bytes
Hans-Dirk Flaechsig wrote:
>
> Hi!
>
> ich habe ein (hoffentlich) kleines Problem bei Visual C++. Ich moechte einen FormView verwenden, der nur
> eine Listbox oder aehnliches enthaelt. Beim veraendern der Fenstergroesse sollte dieser sich dann anpassen.
> Fuer den Anfang wuerde es mir reichen, wenn ich die Listbox an den Fensterrahmen 'anheften' kann. Was
> sonst noch interessant waere ist die Beschreibung ueber eine relative Position (also 30% vom linken Rand oder
> so aehnlich.
Die folgende Loesung geht von einem normalen View aus. Sie kann
aber auch an einen Form-View angepasst werden.
Die View-Klasse besitzt eine Membervariable vom Typ CListBox*, also
einen Zeiger auf eine Instanz der Listbox-Klasse.
Die Listbox wird als Kindfenster des Views angelegt, weshalb zwei
Methoden wichtig sind:
OnCreate
und
OnSize.
In der Funktion OnCreate wird die Listbox erzeugt.
int CProgView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
// Berechnet die Groesse der Listbox, aus der Groesse des Views.
RECT r;
::SetRect(&r, lpCreateStruct->x, lpCreateStruct->y,
lpCreateStruct->cx, lpCreateStruct->cy);
// Fordert Speicher fuer die Listbox an.
m_listBox = new CListenBox();
ASSERT (m_listBox != NULL);
// Erzeugt eine Listbox.
// Die Bedeutung der Attribute WS_CHILD | WS_VISIBLE | WS_VSCROLL |
// WS_HSCROLL | LBS_NOTIFY | LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL |
// LBS_DISABLENOSCROLL kann man in der Hilfedatei von AppStudio nachschlagen.
// r gibt die Groesse der Listbox an
// this bezeichnet das Objekt, zu dem die Listbox gehoert, also der View
// IDC_LISTVIEW ist die ID der Listbox
m_listBox->Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL |
WS_HSCROLL | LBS_NOTIFY |
LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL |
LBS_DISABLENOSCROLL, r, this, IDC_LISTVIEW);
return 0;
}
Das Anpassen der Listbox-Groesse an die Rahmengroesse geschieht
in folgender Funktion:
void CProgView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if (m_listBox != NULL)
m_listBox->MoveWindow(0, 0, cx, cy);
}
Quelle:
Visual C++
ADVANCED PROGRAMMING
Ralf Morgenstern
Mathias Oberdorfer
ADDISON-WESLEY
ISBN 3-89319-760-5
Seite: 117 ff
Gruss
Robert
r.seidner@wzl-ps1.wzl.rwth-aachen.de
Re: visual c++ und Fenstergroesse
Author: Claus Faerber
Date: Sat, 13 Jan 1996 08:27
Date: Sat, 13 Jan 1996 08:27
39 lines
1907 bytes
1907 bytes
Hans-Dirk Flaechsig <hdf@uni-paderborn.de> schrieb zu
visual c++ und Fenstergroesse
in Artikel <4d2uik$5g0@news.uni-paderborn.de> vom 11.01.96:
> Hi!
>
> ich habe ein (hoffentlich) kleines Problem bei Visual C++. Ich moechte einen
> FormView verwenden, der nur eine Listbox oder aehnliches enthaelt. Beim
> veraendern der Fenstergroesse sollte dieser sich dann anpassen. Fuer den
> Anfang wuerde es mir reichen, wenn ich die Listbox an den Fensterrahmen
> 'anheften' kann. Was sonst noch interessant waere ist die Beschreibung ueber
> eine relative Position (also 30% vom linken Rand oder so aehnlich.
>
> Wenn jemand von Euch also weiss, wie man so etwas unter VC++ 2.0 realisiert,
> waere ich fuer eine Mail dankbar. Ach ja, die Frage mag dumm klingen, aber
> ich arbeite noch nicht lange mit dem System.
Im Message-Handler fuer WM_WINDOWPOSCHANGED schreibst Du einfach:
void CYourFormView::OnWindowPosChanged ( WINDOWSPOS FAR* lpwp )
{
CFormView::OnWindowPosChanged( lpwp );
CRect rc; GetClientRect( rc );
// hier kannst Du dann evt. einen Rand hinzufuegen:
rc.left += rc.right *10 /3; // zB. 30% links
GetDlgItem( IDC_YOURLISTBOX ) -> MoveWindow( rc );
}
PS: Wenn Du mit MFC programmierst, solltest Du das auch schreiben,
und nicht nur indirekt, indem Du CFormView erwaehnst.
Claus
------------------------------------------------------------------------
Claus Andre Faerber - claus@faerber.muc.de - http://www.muc.de/~cfaerber
------------------------------------------------------------------------
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads