🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#1227
Author: Hans-Dirk Flaechsig
Date: Thu, 11 Jan 1996 12:07
18 lines
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
#1246
Author: Uwe Tantz
Date: Fri, 12 Jan 1996 11:35
44 lines
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
#1248
Author: Robert Seidner
Date: Fri, 12 Jan 1996 21:27
79 lines
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
#1263
Author: Claus Faerber
Date: Sat, 13 Jan 1996 08:27
39 lines
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