Code: Select all
;========================================================
; CheckOptionColor() sets the foreground & background
; colours of the OptionGadget() and CheckBoxGadget()
;
; requires a window-level callback - for WINDOWS ONLY
;
; tested with PureBasic v5.31 on Windows 8.1 Pro (x64)
;
; by TI-994A - free to use, improve, share...
;
; 30th November 2014
;========================================================
Procedure WndProc(hWnd, uMsg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
If uMsg = #WM_CTLCOLORSTATIC
gadgetNo = GetProp_(lParam, "PB_ID")
fgColor = GetProp_(GadgetID(gadgetNo), "fgc")
bgColor = GetProp_(GadgetID(gadgetNo), "bgc")
If fgColor Or bgColor
SetTextColor_(wParam, fgColor)
SetBkMode_(wParam, #TRANSPARENT)
ProcedureReturn bgColor
EndIf
EndIf
ProcedureReturn result
EndProcedure
Procedure CheckOptionColor(gadgetNo, fgColor = #Black, bgColor = #White)
SetProp_(GadgetID(gadgetNo), "fgc", fgColor)
SetProp_(GadgetID(gadgetNo), "bgc", CreateSolidBrush_(bgColor))
OpenLibrary(0, "uxtheme.dll")
CallFunction(0, "SetWindowTheme", GadgetID(gadgetNo), @none, @none)
CloseLibrary(0)
EndProcedure
;demo code
Enumeration
#MainWindow
#option1
#option2
#option3
#check1
#check2
#check3
EndEnumeration
wFlags = #PB_Window_SystemMenu | #PB_Window_ScreenCentered
OpenWindow(#MainWindow, #PB_Any, #PB_Any, 300, 150, "Options & Checks", wFlags)
SetWindowColor(#MainWindow, #Gray)
SetWindowCallback(@WndProc())
OptionGadget(#option1, 20, 15, 120, 30, "Red/Yellow")
CheckOptionColor(#option1, #Red, #Yellow)
OptionGadget(#option2, 160, 15, 120, 30, "Default/Cyan")
CheckOptionColor(#option2, #Null, #Cyan) ;default fore colour
CheckBoxGadget(#check1, 20, 55, 120, 30, "Blue/Default")
CheckOptionColor(#check1, #Blue) ;default back colour
CheckBoxGadget(#check2, 160, 55, 120, 30, "White/Red")
CheckOptionColor(#check2, #White, #Red)
OptionGadget(#option3, 160, 100, 120, 30, "Standard Option")
CheckBoxGadget(#check3, 20, 100, 120, 30, "Standard Check")
While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend