Hello everyone,

I'm currently developing a rather complex application that contains a broad 
variety of the Win32::GUI controls, among them the toolbar control which 
causes problems in my case.
I have coded a little sample that demonstrates the issue (the script tries 
to load a 16x16 px 2 bit bitmap and a 16x16 px 24 bit bitmap but it will 
work the same without them, so just ignore the initial warnings for now):


##### START OF SAMPLE CODE #####

#!/usr/bin/perl -w

use strict;
use warnings;

use Win32;
use Win32::GUI qw(TBSTYLE_BUTTON TBSTATE_ENABLED TBSTYLE_AUTOSIZE 
TBSTYLE_SEP);

my $window_main = Win32::GUI::Window->new(
   -name        => 'Window',
   -text        => 'Code sample "toolbar problem"',
   -width       => 640,
   -height      => 480,
   -onResize    => \&resizeWindowMain,
   -onTerminate => \&quitApplication,
);

my $imagelist_buttons = new Win32::GUI::ImageList(16, 16, 0|24|1, 1, 0);
$imagelist_buttons->Add('dummy.bmp', 'dummy_mask.bmp');

$window_main->AddToolbar(
   -imagelist     => $imagelist_buttons,
   -name          => 'Toolbar',
   -flat          => 1,
   -multiline     => 1,
   -flat          => 1,
);

$window_main->{'Toolbar'}->AddString('Dummy button');

$window_main->{'Toolbar'}->AddButtons(
   14,
   0, 1,  TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, 0,
   0, 2,  TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, 0,
   0, 3,  TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, 0,
   0, 0,  TBSTATE_ENABLED, TBSTYLE_SEP,                       0,
   0, 4,  TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, 0,
   0, 5,  TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, 0,
   0, 6,  TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, 0,
   0, 7,  TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, 0,
   0, 0,  TBSTATE_ENABLED, TBSTYLE_SEP,                       0,
   0, 8,  TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, 0,
   0, 9, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, 0,
   0, 0,  TBSTATE_ENABLED, TBSTYLE_SEP,                       0,
   0, 10, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, 0,
   0, 11, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, 0,
);

$window_main->AddTreeView(
   -name  => 'Treeview',
   -width => 200,
);

$window_main->Center();
$window_main->Show();

Win32::GUI::Dialog();

$window_main->Hide();

exit(0);

sub quitApplication {
   return -1;
}

sub resizeWindowMain {
   my $windowMain_height = $window_main->ScaleHeight();
   my $windowMain_width = $window_main->ScaleWidth();
   my $toolbar_height = $window_main->{'Toolbar'}->Height();

   $window_main->{'Toolbar'}->AutoSize();

   $window_main->{'Treeview'}->Change(
       -pos => [0, $toolbar_height],
   );

   $window_main->{'Treeview'}->Height($windowMain_height - $toolbar_height);

   print $window_main->{'Toolbar'}->GetRows()." rows retrieved.\n";
}

##### END OF SAMPLE CODE #####


This sample creates a simple window with a toolbar containing a lot of dummy 
buttons and a treeview. I expected that the treeview control would appear 
just below the toolbar. But when I run this script on my machine (Active 
Perl 5.10.0.1001, Win32::GUI 1.05.90, Windows Vista 6.0.6000) and resize the 
window there appears some space between the two items that increases with 
the number of toolbar lines. If the window is wide enough for just one line 
of toolbuttons there is no space but as soon as the buttons begin to wrap 
due to smaller window dimensions the upper border of the treeview is placed 
wrong. Maybe this is a simple mistake in my resizing subroutine but I can't 
find any explanation for this behaviour.

As a next step to achieve optimal Windows look and feel under XP / Vista I 
decided to use the rebar control, too. The documentation that comes with the 
PPM distribution has leaks on this topic and left me with a lot of 
questions... I found another version of the rebar help in the sourceforge 
documentation project but still I'm not quite sure how to deal with this 
control.
There it said that any rebar band can only contain one single child control 
so you had to create a window (with "popstyle => WS_CAPTION | WS_SIZEBOX" 
and "-pushstyle => WS_CHILD") which contains the controls first and then 
assign it to a rebar band as a child. But how can I integrate my former 
toolbar into the band? My first thought was to assign the toolbar to the 
child window. It kind of worked but in my case looked really weird because 
I'm using a manifest file (like the one Rob posted some days ago). The rebar 
band uses the correct style (this bluish / glassy optic) but the child 
window is simply embedded and appears as an ugly gray overlay... Am I 
missing any required style constants here that could help? (I already tried 
everything like "WS_CLIP..." and "..._TRANSPARENT" without success.)
Anyway I'm not sure at all if this is the right way to do it because it 
seems a little too complicated. I also tried to assign the toolbar directly 
to the rebar band. This produced the desired look but now the toolbar 
covered the grippers and chevrons of the band. Aaaarghh!!! I think there 
must be another way to combine these two controls, right? In the 
documentation it even says that "TBSTYLE_EX_HIDECLIPPEDBUTTONS" could be 
used for toolbars displayed in rebars to hide partially clipped buttons that 
are covered by an adjacent band and show them on the chevron's dropdown menu 
instead. I couldn't get that one to work either... :'-(

I guess this is a lot of question marks at once :-) but I'm grateful for 
every little hint that could help me to get on the right track. Has anyone 
made any experiences with this stuff?

Thanks in advance, best regards from Bonn, Germany,
Matthias. 


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Perl-Win32-GUI-Users mailing list
Perl-Win32-GUI-Users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users
http://perl-win32-gui.sourceforge.net/

Reply via email to