With this code you can change a Toolbar backcolor (Windows Common Controls 5 or 6).
You can also use a picture (bitmap) as background, here I'll do both things.
I recommend downloading the example attached, but I'll also show the code here, I used Common Controls 6 toolbars for this example, minor changes are needed if you want to use Common Controls 5 toolbars.
IN THE FORM
- Add 2 Toolbars, change Toolbar1 style to FLAT, Toolbar2 style must remain STANDARD
- Add a Picture box and add a picture to it.
- Paste this code:
VB Code:
| Option Explicit Private Sub Form_Load() Private Sub ApplyChanges() |
IN A MODULE
VB Code:
|
Option Explicit Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" ( _ ByVal hWnd1 As Long, ByVal hWnd2 As Long, _ ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Private Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" ( _ ByVal hwnd As Long, ByVal nindex As Long, ByVal dwnewlong As Long) As Long Public Declare Function InvalidateRect Lib "user32" _ (ByVal hwnd As Long, lpRect As Long, ByVal bErase As Long) As Long Public Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long Public Declare Function CreatePatternBrush Lib "gdi32" (ByVal hBitmap As Long) As Long Public Enum enuTBType enuTB_FLAT = 1 enuTB_STANDARD = 2 End Enum Private Const GCL_HBRBACKGROUND = (-10) Public Sub ChangeTBBack(TB As Object, PNewBack As Long, pType As enuTBType) Dim lTBWnd As Long Select Case pType Case enuTB_FLAT 'FLAT Button Style Toolbar 'Apply directly to TB Hwnd DeleteObject SetClassLong(TB.hwnd, GCL_HBRBACKGROUND, PNewBack) Case enuTB_STANDARD 'STANDARD Button Style Toolbar lTBWnd = FindWindowEx(TB.hwnd, 0, "msvb_lib_toolbar", vbNullString) 'Find Hwnd first DeleteObject SetClassLong(lTBWnd, GCL_HBRBACKGROUND, PNewBack) 'Set new Back End Select End Sub '==========================================================================' If you want to use Win Common Control 5 Toolbars, use "ToolbarWindow32" instead of ' "msvb_lib_toolbar". Win Common Control 5 Toolbars can't be FLAT, they are always STANDARD, ' so use enuTB_STANDARD when you call this '========================================================================== |
More info about this
- This will also work with xp styles (manifest file).
- If the picture is smaller than the toolbar the pattern will be repeated, if its too big, you will see just part of it, so I recomend to make your bmp or jpg picture the same size of the toolbar. You can also let it repeat the pattern as I did in the project attached.
- Changes will remain visible in design mode until you close VB IDE.
- If you apply this to a toolbar in your app with a given style (i.e: Flat) all the flat toolbars and the controls that contain flat toolbars with the same Comon Controls version will also be modified, (but JUST inside your app).
Example: Common Dialog Control uses a vertical toolbar (WCC version 5).