Hello all,
 
SInce we all were looking for functions f\to control the toolbar and
I really needed one and after digging, here is a good control code
will make you happy. Anyone interested to complete the package and
include it with the WIn3::GUI welcomed, I realy did not have the time as I just
needed to do basci enable/disable buttons, replace images.
 
The code below has functions for enabling/disabling, deleting buttons
setting  toolbar style,checking buttons, alot to doc.....
 
The code is here:
 
 

use Win32::GUI;
 
#========================================================
sub WM_USER {0x0400;} # 0x0400 = 1024
#========================================================
sub TBCDRF_NOEDGES       {0x00010000;}  # Don't draw button edges
sub TBCDRF_HILITEHOTTRACK   {0x00020000;} # Use color of the button bk when hottracked
sub TBCDRF_NOOFFSET       {0x00040000;}  # Don't offset button if pressed
sub TBCDRF_NOMARK        {0x00080000;}  # Don't draw default highlight of image/text for TBSTATE_MARKED
sub TBCDRF_NOETCHEDEFFECT   {0x00100000;} # Don't draw etched effect for disabled items
#========================================================
#------------- Toolbar button states functions for use with Send Message---------
sub TB_ENABLEBUTTON       {(&WM_USER + 1);}
sub TB_CHECKBUTTON       {(&WM_USER + 2);}
sub TB_PRESSBUTTON        {(&WM_USER + 3);}
sub TB_HIDEBUTTON        {(&WM_USER + 4);}
sub TB_INDETERMINATE      {(&WM_USER + 5);}
 
sub TB_MARKBUTTON        {(&WM_USER + 6);}
sub TB_ISBUTTONENABLED     {(&WM_USER + 9);}
sub TB_ISBUTTONCHECKED     {(&WM_USER + 10);}
sub TB_ISBUTTONPRESSED     {(&WM_USER + 11);}
sub TB_ISBUTTONHIDDEN      {(&WM_USER + 12);}
sub TB_ISBUTTONINDETERMINATE {(&WM_USER + 13);}
sub TB_ISBUTTONHIGHLIGHTED   {(&WM_USER + 14);}
sub TB_SETSTATE          {(&WM_USER + 17);}
sub TB_GETSTATE          {(&WM_USER + 18);}
 
#--------------------- Toolbar button states constants---------------------------------------
sub TBSTATE_CHECKED         {0x01;}
sub TBSTATE_PRESSED         {0x02}
sub TBSTATE_ENABLED         {0x04}
sub TBSTATE_HIDDEN          {0x08}
sub TBSTATE_INDETERMINATE   {0x10}
sub TBSTATE_WRAP           { 0x20}
sub TBSTATE_ELLIPSES        {0x40}
sub TBSTATE_MARKED          {0x80}
 
sub TB_CheckButton          {&TB_SetState(@_, &TBSTATE_CHECKED);}
sub TB_EnableButton         {&TB_SetState(@_, &TBSTATE_ENABLED);}
sub TB_PressButton          {&TB_SetState(@_, &TBSTATE_PRESSED);}
sub TB_HideButton           {&TB_SetState(@_, &TBSTATE_HIDDEN);}
sub TB_Indeterminate        {&TB_SetState(@_, &TBSTATE_INDETERMINATE);}
sub TB_Wrap           {&TB_SetState(@_, &TBSTATE_WRAP);}
sub TB_Ellipses           {&TB_SetState(@_, &TBSTATE_ELLIPSES);}
sub TB_Marked           {&TB_SetState(@_, &TBSTATE_MARKED);}
 
sub TB_MarkButton           {&TB_SetState(@_, &TB_ENABLEBUTTON);}
sub TB_ISButtonEnabled      {&TB_SetState(@_, &TB_ENABLEBUTTON);}
sub TB_ISButtonChecked      {&TB_SetState(@_, &TB_ENABLEBUTTON);}
sub TB_ISButtonPressed      {&TB_SetState(@_, &TB_ENABLEBUTTON);}
sub TB_ISButtonHidden       {&TB_SetState(@_, &TB_ENABLEBUTTON);}
sub TB_ISButtonIndeterminate {&TB_SetState(@_, &TB_ENABLEBUTTON);}
sub TB_ISButtonHighlighted  {&TB_SetState(@_, &TB_ENABLEBUTTON);}
 

sub TB_SetState{
my ($Handle, $Button, $State) = @_;
 
 $Handle or return undef;
 $Button ||=0;
 $State ||= 1;
 
 return Win32::GUI::SendMessage($Handle, &TB_SETSTATE, $Button, $State);
}
#========================================================
#--------------------- Toolbar styles---------------------------------------------------
sub TBSTYLE_TOOLTIPS        {0x0100}
sub TBSTYLE_WRAPABLE        {0x0200}
sub TBSTYLE_ALTDRAG         {0x0400}
sub TBSTYLE_FLAT            {0x0800}
sub TBSTYLE_LIST            {0x1000}
sub TBSTYLE_CUSTOMERASE     {0x2000}
sub TBSTYLE_REGISTERDROP    {0x4000}
sub TBSTYLE_TRANSPARENT     {0x8000}
sub TBSTYLE_EX_DRAWDDARROWS {0x00000001}
 
sub TB_SETSTYLE             {(&WM_USER + 56);}
sub TB_GETSTYLE             {(&WM_USER + 57);}
 
sub ToolbarSetStyle{
my ($Handle, $Style) = @_;
 
 $Handle or return undef;
 $Style ||= 0;
 
 return Win32::GUI::SendMessage($Handle, &TB_SETSTYLE, 0, $Style | 1);
 #return Win32::GUI::SendMessage($Handle, &TB_SETSTYLE, 0, $Style | &TBGetStyle);
}
#========================================================
sub TBGetStyle{
my ($Handle) = @_;
 $Handle or return undef;
 return Win32::GUI::SendMessage($Handle, &TB_GETSTYLE, 0, 0);
}
#========================================================
#--------------------- Toolbar button styles---------------------------------------------------
sub TBSTYLE_BUTTON          {0x0000}
sub TBSTYLE_SEP             {0x0001}
sub TBSTYLE_CHECK           {0x0002}
sub TBSTYLE_GROUP           {0x0004}
sub TBSTYLE_CHECKGROUP      {(&TBSTYLE_GROUP | &TBSTYLE_CHECK);}
sub TBSTYLE_DROPDOWN        {0x0008}
sub TBSTYLE_AUTOSIZE        {0x0010} # automatically calculate the cx of the button
sub TBSTYLE_NOPREFIX        {0x0020} # if this button should not have accel prefix
 
#========================================================
#&ToolbarSetStyle($TB, 0x1000|0x0800);
#&ToolbarSetStyle($TB, &TBSTYLE_FLAT|&TBSTYLE_ALTDRAG);
 
#sub TBstyle_Transparent{&TBSetStyle(@_, &TBSTYLE_TRANSPARENT);}
#========================================================
#&TBstyle_Transparent($TB, 2);
sub TB_GETINSERTMARK        {(&WM_USER + 79)}
sub TB_SETINSERTMARK        {(&WM_USER + 80)}
sub TB_INSERTMARKHITTEST    {(&WM_USER + 81)}
sub TB_MOVEBUTTON           {(&WM_USER + 82);}
sub TB_GETMAXSIZE           {(&WM_USER + 83)}
sub TB_SETEXTENDEDSTYLE     {(&WM_USER + 84)}
sub TB_GETEXTENDEDSTYLE     {(&WM_USER + 85)}
sub TB_GETPADDING           {(&WM_USER + 86)}
sub TB_SETPADDING           {(&WM_USER + 87)}
sub TB_SETINSERTMARKCOLOR   {(&WM_USER + 88)}
sub TB_GETINSERTMARKCOLOR   {(&WM_USER + 89)}
 
sub TB_MoveButton{
my ($Handle, $OldButton, $NewButton) = @_;
 $Handle or return undef;
 return Win32::GUI::SendMessage($Handle, &TB_MOVEBUTTON, $OldButton, $NewButton);
}
#========================================================
#&TB_MoveButton ($TB, 01, 5);
#&TBSetStyle($TB, &TBSTYLE_SEP);
#&TBSetStyle($TB, 3, &TBSTYLE_SEP);
#$Style = &TBGetStyle($TB);
#print "Style =", hex $Style, "\n";
#========================================================
sub TB_SETHOTIMAGELIST      {(&WM_USER + 52)}
 
sub TB_SetHotImageList{
my ($Handle, $OldButton, $NewButton) = @_;
 $Handle or return undef;
 return Win32::GUI::SendMessage($Handle, &TB_MOVEBUTTON, $OldButton, $NewButton);
}
#========================================================
#$ImageList =
#&TB_SetHotImageList($TB, 0, $B);
#========================================================
sub TB_CHANGEBITMAP         {(&WM_USER + 43)}
#========================================================
sub TB_ChangeBitmap {
my ($Handle, $Button, $Bitmap) = @_;
 $Handle or return undef;
 return Win32::GUI::SendMessage($Handle, &TB_CHANGEBITMAP, $Button, $Bitmap);
}
#========================================================
sub TB_CheckButton{
my ($Handle, $Button, $State) = @_;
 $Handle or return undef;
 return Win32::GUI::SendMessage($Handle, &TB_CHECKBUTTON, $Button, $State);
}
#========================================================
#&TB_CheckButton($TB, 2, 1);
#========================================================
sub TB_DELETEBUTTON         {(&WM_USER + 22)}
 
sub TB_DeleteButton{
my ($Handle, $Button) = @_;
 $Handle or return undef;
 return Win32::GUI::SendMessage($Handle, &TB_DELETEBUTTON, $Button, 0);
}
#========================================================
#&TB_DeleteButton($TB, 2);
#========================================================
# takes object  new Win32::GUI::Tooltip(PARENT, %OPTIONS)
sub TB_SETTOOLTIPS          {(&WM_USER + 36)}
sub TB_SetToolTips {
 
my ($Handle, $hwndToolTip) = @_;
 $Handle or return undef;
 return Win32::GUI::SendMessage($Handle, &TB_SETTOOLTIPS, $hwndToolTip, 0);
}
#========================================================
 
#&TB_ChangeBitmap($TB, 1, 2);
#TBSTATE_CHECKED  The button has the TBSTYLE_CHECK style and is being clicked.
#TBSTATE_ELLIPSES  Version 4.70. The button's text is cut off and an ellipsis is displayed.
#TBSTATE_ENABLED  The button accepts user input. A button that doesn't have this state is grayed.
#TBSTATE_HIDDEN  The button is not visible and cannot receive user input.
#TBSTATE_INDETERMINATE  The button is grayed.
#TBSTATE_MARKED  Version 4.71. The button is marked. The interpretation of a marked item is dependent upon the application. 
#TBSTATE_PRESSED  The button is being clicked.
#TBSTATE_WRAP  The button is followed by a line break. The button must also have the TBSTATE_ENABLED state.
 
#TBSTYLE_AUTOSIZE  Version 4.71. The button's width will be calculated based on the text of the button, not on the size of the image. 
#TBSTYLE_BUTTON  Creates a standard push button. 
#TBSTYLE_CHECK  Creates a button that toggles between the pressed and nonpressed states each time the user clicks it. The button has a different background color when it is in the pressed state.
#TBSTYLE_CHECKGROUP  Creates a check button that stays pressed until another button in the group is pressed.
#TBSTYLE_DROPDOWN  Version 4.70. Creates a drop-down list button. Drop-down buttons send the TBN_DROPDOWN notification. If the toolbar has the TBSTYLE_EX_DRAWDDARROWS extended style, drop-down buttons will have a drop-down arrow displayed next to them. 
#TBSTYLE_GROUP  Creates a button that stays pressed until another button in the group is pressed.
#TBSTYLE_NOPREFIX  Version 4.71. The button text will not have an accelerator prefix associated with it.
#TBSTYLE_SEP  Creates a separator, providing a small gap between button groups. A button that has this style does not receive user input. 
#-------------------------------------------------------------
# set button state functions test
#&TB_HideButton ($TB, 2);
#&TB_CheckButton ($TB, 2);
#&TB_EnableButton ($TB, 2);
#&TB_PressButton ($TB, 2);
#&TB_Indeterminate ($TB, 2);
#&TB_Wrap ($TB, 2);
#&TB_Ellipses ($TB, 2);
#&TB_Marked ($TB, 2);
#-------------------------------------------------------------
 
 
# End of the code