InvalidateRect_ hat nicht funktioniert, aber dafür UpdateWindow_(WindowID( WIN))
Code: Alles auswählen
@sauber programmiert:
Ich benutze ein Fenster mit 2 Container-Gadgets, in denen sich mehrere ButtonImageGadgets liegen. Und offensichtlich liegt hier das Problem, die ButtonImageGadgets werden nicht aufgefrischt. Allerdings werden sie gezeichnet, wenn die Maus drüberfährt. Ein vereinfachtes Beispiel folgt, wenn UpdateWindow_ aktiviert wird, erfolgt die Darstellung korrekt:
EnableExplicit
Enumeration Handles 1 Step 1
#WIN
#GDT1
#GDT2
#GDT3
#GDT4
#IMG3
#IMG4
#CT1
EndEnumeration
Procedure ColorizeBTN(HANDLE.i, Image_ID)
Define W=200, H=50
Image_ID= CreateImage(#PB_Any, W, H)
LoadFont(1, "@Arial Unicode MS", Int( 16) )
If StartDrawing(ImageOutput(IMAGE_ID))
DrawingMode(#PB_2DDrawing_Transparent)
Box(0, 0, W, H, #White )
DrawingFont(FontID(1))
FrontColor( #Red)
DrawText((W-TextWidth("TEST"))/2, (H-TextHeight("TEST"))/2, "TEST")
StopDrawing()
EndIf
SetGadgetAttribute(Handle, #PB_Button_Image, ImageID(IMAGE_ID))
EndProcedure
Procedure Make_Window()
OpenWindow(#Win, 0, 0, 500, 500, "", #PB_Window_SystemMenu | #PB_Window_WindowCentered | #PB_Window_Maximize)
ButtonGadget(#GDT1, 10,100, 200,50, "TEST")
ButtonGadget(#GDT2, 10,200, 200,50, "TEST")
ButtonImageGadget(#GDT3, 10,300,200,50, #IMG3, #PB_Button_Toggle )
ColorizeBTN( #GDT3, #IMG3)
ContainerGadget( #CT1, 10, 400, 300, 100, #PB_Container_BorderLess)
ButtonImageGadget(#GDT4, 10,10 ,200,50, #IMG4, #PB_Button_Toggle )
ColorizeBTN( #GDT4, #IMG4)
CloseGadgetList()
EndProcedure
Procedure Set_HotKey(Key, Modifiers)
Static ID
If RegisterHotKey_(0, ID, Modifiers, Key) = 0
ProcedureReturn -1
EndIf
ID+1
ProcedureReturn ID-1
EndProcedure
Define Event.i, HK.i, MSG.MSG
Make_Window()
HideWindow( #Win, #True)
HK = Set_HotKey(#VK_P,#MOD_ALT | #MOD_SHIFT)
Repeat
GetMessage_(@Msg, 0, 0, 0)
If MSG\message = #WM_HOTKEY
Select MSG\wParam
Case HK
HideWindow( #Win, #False)
; UpdateWindow_(WindowID( #WIN))
Repeat
Event=WaitWindowEvent()
Until Event=#PB_Event_CloseWindow
EndSelect
EndIf
Until Event=#PB_Event_CloseWindow