From: Mattia B. <mb...@ds...> - 2002-05-10 18:57:48
|
> The GUI i am writing is included below. > To see the two behaviours just try if(0) or if(1) > over after > #### THE SWITCH ################################### > line in the code. > > I got a screenshot of the two versions at > http://crazyinsomniac.perlmonk.org/images/dillema.jpeg > > The Frame version looks AWFUL. > There is horrible flickering, and it looks checkered. > But, the Frame version exibits one behaviour which I like, > when you attempt to resize the app, the frame version does not allow > the user to resize it beyond the minimum size, that is, the frame > version can never become a tiny little box. > > The Panel version looks EXCELLENT > (still flicker on resize, but at least its painted *clean*) > buuuut sadly this version can be resized into a tiny little box. > I don't like that. > > Does anyone know how I can get the nice Panel-ized lood, > with the Frame resize behaviour? Just call SetSizeHints on the frame ( notice that GUI() calls SetSH on wht it is passed to it, so with if(1) calls it on the frame, with if(0) on the panel, but you need to call it on the frame. Add this after the call to GUI($p) > ################################################### > #### THE SWITCH ################################### > ################################################### > if(1) { > use vars qw/ $COLOR /; > # $COLOR = Wx::Colour->new(212,208,200); > # $this->SetBackgroundColour($COLOR); # doesn't stop flicker++ > GUI($this); > # use Wx::Event qw/ EVT_SIZE /; > # EVT_SIZE($this,\&OnSize); > } else { > ## Panels make everything pretty (no repainting issues) > my $p = Wx::Panel->new( > $this, > -1, > [50,50], > [350,350], > ); > GUI($p); my $sz = Wx::BoxSizer->new( Wx::wxHORIZONTAL ); $sz->Add( $p, 1, wxGROW ); $this->SetSizer( $sz ); $this->SetAutoLayout( 1 ); $this->Layout(); $sz->Fit( $this ); $sz->SetSizeHints( $this ); > # use Wx::Event qw/ EVT_SIZE /; > # EVT_SIZE($this,\&OnSize); > } > > return $this; > } sub GUI { <snip> > > $parent->SetAutoLayout( 1 ); > $parent->SetSizer( $RootSizer ); > > $RootSizer->Fit( $parent ); > $RootSizer->SetSizeHints( $parent ); You don't need to do this on the panel, just on the frame ( yes, I know the routine is meant to be called on both ) HTH Mattia |