From: Jez W. <je...@je...> - 2004-02-23 11:24:31
|
Steve, I'm still playing with rebars, and have come across an interesting = problem:) To quote from msdn: |
From: Jez W. <je...@je...> - 2004-02-23 11:34:34
|
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=3D/library/en-us/vccore= 98/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 -----=20 From: Jez White=20 To: Win32-GUI ; Steve Pick=20 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: |
From: Jez W. <je...@je...> - 2004-02-23 13:09:33
|
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 =3D new Win32::GUI::Bitmap("one.bmp"); my $B2 =3D new Win32::GUI::Bitmap("two.bmp"); my $B3 =3D new Win32::GUI::Bitmap("three.bmp"); my $IL =3D 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 =3D new GUI::Window( -title =3D> "Win32::GUI::Rebar test", -left =3D> 100, -top =3D> 100, -width =3D> 600, -height =3D> 200, -name =3D> "Window", #-class =3D> $WC, -onTerminate =3D> sub { return -1 }, ); #$mainwindow->Hook(20,\&OtherErase); #create the child window which will contain the toolbar my $band0 =3D new Win32::GUI::Window ( -parent =3D> $mainwindow, -name =3D> "ToolBar", -popstyle =3D> WS_CAPTION | WS_SIZEBOX, -pushstyle =3D> WS_CHILD|WS_CLIPCHILDREN, #-pushexstyle =3D> WS_EX_TRANSPARENT, ); #create a child window for band 1 of the rebar control, this band will = contain two buttons my $band1 =3D new Win32::GUI::Window ( -parent =3D> $mainwindow, -name =3D> "Action", -popstyle =3D> WS_CAPTION | WS_SIZEBOX, -pushstyle =3D> WS_CHILD|WS_CLIPCHILDREN, #-pushexstyle =3D> WS_EX_TRANSPARENT, ); $band1->Hook(20,\&EraseTest); #Add a button to band 1 $band1->AddButton ( -name =3D> 'Button1', -pos =3D> [0, 1], -size =3D> [60, 20], -text =3D> 'Button 1', -tip =3D> 'Button 1', -onClick =3D> sub {print 'Button 1 clicked' }, ); #Add a button to band 1 $band1->AddButton ( -name =3D> 'Button2', -pos =3D> [65, 1], -size =3D> [60, 20], -text =3D> 'Button 2', -tip =3D> 'Button 2', -onClick =3D> sub {print 'Button 2 clicked' }, ); #create a rebar control my $rebar;=20 $rebar =3D $mainwindow->AddRebar( -name =3D> "Rebar", -bandborders =3D> 1, #-fixedorder =3D> 1, -onHeightChange =3D> sub {print = 'Rebar_HeightChange'.$rebar->Height;}, ); #Insert band 1 $rebar->InsertBand ( =20 -child =3D> $band0, -width =3D> 100, -minwidth =3D> 100, -minheight =3D> 24, -bitmap =3D> $B1 ); #Insert band 2 $rebar->InsertBand ( =20 -child =3D> $band1, -width =3D> 130, -minwidth =3D> 130, -minheight =3D> 24, -bitmap =3D> $B1 ); #Add the toolbar to band 0 my $TB =3D $band0->AddToolbar( -name =3D> "Toolbar", -nodivider =3D> 1, -onButtonClick =3D> sub {my ($self,$button)=3D@_;print " button = $button clicked";}, ); #Set the image list, and add the styles=20 $TB->SetImageList($IL); $TB->SetStyle(TBSTYLE_FLAT|TBSTYLE_TRANSPARENT|1|TBSTYLE_LIST|TBSTYLE_TOO= LTIPS); $TB->SetExtendedStyle(0x00000008); =20 #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); =20 my $dchandle=3D $mainwindow->GetDC->{-handle}; Win32::GUI::SendMessage($mainwindow, 20, $dchandle, 0); return 1; } #sub OtherErase { # print 'in other'; # return 1; #} ----- Original Message -----=20 From: Jez White=20 To: Win32-GUI ; Steve Pick=20 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=3D/library/en-us/vccore= 98/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 -----=20 From: Jez White=20 To: Win32-GUI ; Steve Pick=20 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: |