Ok - this is the code I've got (run in the samples folder to pick up the
bitmap). I've hooked the WM_ERASEBKGND for one of the child controls, and I
think I'm calling the WM_ERASEBKGND for the parent window - still no joy - the
background is not correct - am I missing something simple?
Cheers,
jez.
- any suggestions?
use Win32::GUI;
use strict;
#Create the imagelist that will be used for the toolbar
my $B1 = new Win32::GUI::Bitmap("one.bmp");
my $B2 = new Win32::GUI::Bitmap("two.bmp");
my $B3 = new Win32::GUI::Bitmap("three.bmp");
my $IL = new Win32::GUI::ImageList(16, 16, 0, 3, 10);
$IL->Add($B1, 0);
$IL->Add($B2, 0);
$IL->Add($B3, 0);
#create the main window
my $mainwindow = new GUI::Window(
-title => "Win32::GUI::Rebar test",
-left => 100,
-top => 100,
-width => 600,
-height => 200,
-name => "Window",
#-class => $WC,
-onTerminate => sub { return -1 },
);
#$mainwindow->Hook(20,\&OtherErase);
#create the child window which will contain the toolbar
my $band0 = new Win32::GUI::Window (
-parent => $mainwindow,
-name => "ToolBar",
-popstyle => WS_CAPTION | WS_SIZEBOX,
-pushstyle => WS_CHILD|WS_CLIPCHILDREN,
#-pushexstyle => WS_EX_TRANSPARENT,
);
#create a child window for band 1 of the rebar control, this band will contain
two buttons
my $band1 = new Win32::GUI::Window (
-parent => $mainwindow,
-name => "Action",
-popstyle => WS_CAPTION | WS_SIZEBOX,
-pushstyle => WS_CHILD|WS_CLIPCHILDREN,
#-pushexstyle => WS_EX_TRANSPARENT,
);
$band1->Hook(20,\&EraseTest);
#Add a button to band 1
$band1->AddButton (
-name => 'Button1',
-pos => [0, 1],
-size => [60, 20],
-text => 'Button 1',
-tip => 'Button 1',
-onClick => sub {print 'Button 1 clicked' },
);
#Add a button to band 1
$band1->AddButton (
-name => 'Button2',
-pos => [65, 1],
-size => [60, 20],
-text => 'Button 2',
-tip => 'Button 2',
-onClick => sub {print 'Button 2 clicked' },
);
#create a rebar control
my $rebar;
$rebar = $mainwindow->AddRebar(
-name => "Rebar",
-bandborders => 1,
#-fixedorder => 1,
-onHeightChange => sub {print 'Rebar_HeightChange'.$rebar->Height;},
);
#Insert band 1
$rebar->InsertBand (
-child => $band0,
-width => 100,
-minwidth => 100,
-minheight => 24,
-bitmap => $B1
);
#Insert band 2
$rebar->InsertBand (
-child => $band1,
-width => 130,
-minwidth => 130,
-minheight => 24,
-bitmap => $B1
);
#Add the toolbar to band 0
my $TB = $band0->AddToolbar(
-name => "Toolbar",
-nodivider => 1,
-onButtonClick => sub {my ($self,$button)[EMAIL PROTECTED];print " button
$button clicked";},
);
#Set the image list, and add the styles
$TB->SetImageList($IL);
$TB->SetStyle(TBSTYLE_FLAT|TBSTYLE_TRANSPARENT|1|TBSTYLE_LIST|TBSTYLE_TOOLTIPS);
$TB->SetExtendedStyle(0x00000008);
#Add the buttons
$TB->AddButtons(
4,
0, 1, 4, 0, 0,
1, 2, 4, 0, 1,
0, 0, 0, TBSTYLE_SEP, 0,
2, 3, 4, 0, 2,
);
#add the tooltips
$TB->AddString("One");
$TB->AddString("Two");
$TB->AddString("Three");
#show the main window
$mainwindow->Show;
Win32::GUI::Dialog;
sub EraseTest {
#send the WM_ERASEBKGND to the main window.
print 'in Erase';
#$mainwindow->InvalidateRect(1);
my $dchandle= $mainwindow->GetDC->{-handle};
Win32::GUI::SendMessage($mainwindow, 20, $dchandle, 0);
return 1;
}
#sub OtherErase {
# print 'in other';
# return 1;
#}
----- Original Message -----
From: Jez White
To: Win32-GUI ; Steve Pick
Sent: Monday, February 23, 2004 11:26 AM
Subject: Re: [perl-win32-gui-users] Hook and WM_ERASEBKGND
Arh! The problem (from msdn):
"Normally, if you wanted the dialog bar band to appear transparent, you would
set the WM_EX_TRANSPARENT extended style for the dialog bar object. However,
because WM_EX_TRANSPARENT has some issues with properly painting the background
of a dialog bar, you will need to do a little extra work to achieve the desired
effect"
What this means is when you attach a child window (dialog bar) to a rebar
control, the background is not drawn correctly if you use anything in the
background (a color or bitmap) - under XP (using XP styles), the problem
becomes more apparent since the rebar is drawn with the current style.
A solution is to this problem is presented in the following links:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/HTML/vcconusingdialogbarwithrebarcontrol.asp
http://www.funducode.com/freevc/toolbar/toolbar3.asp
However, both of these solutions require you to handle the WM_ERASEBKGND
message and pass it to the parent control - is this kind of thing you can do
with Hook?
Cheers,
jez.
----- Original Message -----
From: Jez White
To: Win32-GUI ; Steve Pick
Sent: Monday, February 23, 2004 11:16 AM
Subject: [perl-win32-gui-users] Hook and WM_ERASEBKGND
Steve,
I'm still playing with rebars, and have come across an interesting
problem:) To quote from msdn: