''
'' toolbar demo, code by zydon (...@...)
''

#include once "windows.bi"
#include once "win/commctrl.bi"
	
const TBSTYLES = TBSTYLE_FLAT or CCS_ADJUSTABLE or CCS_NODIVIDER 

	dim shared hInstance as HINSTANCE
	
	hInstance = GetModuleHandle( null )
	

'' 
'' Window Procedure Handler 
'' 
function WndProc ( byval hWnd as HWND, _ 
                   byval uMsg as UINT, _ 
                   byval wParam as WPARAM, _ 
                   byval lParam as LPARAM ) as integer 

    function = 0 
    
    select case ( uMsg ) 
	case WM_CREATE 
        '' Toolbar object handle    
        dim hTools as HWND
              
        '' Toolbar button constructors 
        dim tbAddBmp as TBADDBITMAP 
        dim tbb as TBBUTTON

        '' setting common control mode 
        dim iccx as INITCOMMONCONTROLSEX 
        iccx.dwSize = len( iccx ) 
        iccx.dwICC  = ICC_BAR_CLASSES 

        '' bitmap for each button 
        static tbBmp(0 to 6) as BYTE = {STD_FILENEW, STD_FILEOPEN, STD_FILESAVE, STD_CUT, STD_COPY, STD_PASTE }

        '' initialize common controls 32 
        InitCommonControlsEx( @iccx )

        '' Lets build a new toolbar 
        hTools = CreateWindowEx( WS_EX_DLGMODALFRAME, _ 
        						 TOOLBARCLASSNAME, NULL, _ 
                       			 WS_CHILD or WS_VISIBLE or TBSTYLES, _ 
                       			 0, 0, 0, 0, _ 
                       			 hWnd, NULL, _ 
                       			 hInstance, NULL ) 
              
		'' paint toolbar buttons now 
    	if ( hTools <> NULL ) then                 
        	'' draw toolbar panel 
            SendMessage( hTools, TB_BUTTONSTRUCTSIZE, len( tbb ), NULL ) 
            tbAddBmp.hInst = HINST_COMMCTRL 
            tbAddBmp.nID   = IDB_STD_SMALL_COLOR 
            SendMessage( hTools, TB_ADDBITMAP, 0, cint( @tbAddBmp ) ) 

            '' apply bitmap to toolbar buttons 
            with tbb
            	dim i as LONG 
				for i = 0 to 6 
					.iBitmap   = tbBmp(i)
                	.fsState   = TBSTATE_ENABLED 
                	.fsStyle   = iif( i = 3, TBSTYLE_SEP, TBSTYLE_BUTTON )
                	.idCommand = -1 
                	.dwData    = 0 
                	SendMessage( hTools, TB_ADDBUTTONS, 1, cint( @tbb ) ) 
				next 
			end with
		end if 
        
	case WM_KEYDOWN 
    	if( lobyte( wParam ) = 27 ) then 
			PostMessage( hWnd, WM_CLOSE, 0, 0 )
		end if 
        
	case WM_DESTROY 
		PostQuitMessage( 0 )
        exit function 
    end select 
    
    function = DefWindowProc( hWnd, uMsg, wParam, lParam )    

end function 


	'' 
	'' Program entry 
	'' 
	dim wMsg as MSG 
	dim wcls as WNDCLASS      
	dim hWnd as HWND
	
	dim appName as string 
    appName = "WinToolBar" 
    
	with wcls
		.style         = CS_HREDRAW or CS_VREDRAW 
		.lpfnWndProc   = cast( WNDPROC, @WndProc )
		.cbClsExtra    = 0 
		.cbWndExtra    = 0 
		.hInstance     = hInstance 
		.hIcon         = LoadIcon( null, IDI_APPLICATION ) 
		.hCursor       = LoadCursor( null, IDC_ARROW ) 
		.hbrBackground = cast( HGDIOBJ, 16 )  ' btnface color 
		.lpszMenuName  = null 
		.lpszClassName = strptr( appName ) 
	end with
      
	if ( RegisterClass( @wcls ) = false ) then 
   		MessageBox( null, "Failed to register wcls!", appName, MB_ICONERROR )
   		end 1
	end if 
    
	hWnd = CreateWindowEx( 0, _ 
                           appName, "ToolBar Demo", _ 
         			  	   WS_OVERLAPPEDWINDOW or WS_VISIBLE, _ 
         				   100, 100, 300, 200, _ 
         				   null, null, hInstance, null ) 
                          
	'' 
	'' messages loop 
	'' 
	do until( GetMessage( @wMsg, null, 0, 0 ) = FALSE )
		TranslateMessage( @wMsg )
   		DispatchMessage( @wMsg )
	loop
	
	end 0
