Code: Alles auswählen
SendMessage_(GadgetID,#WM_SETREDRAW,#False,0)
; resize und redraw
SendMessage_(GadgetID,#WM_SETREDRAW,#True,0)
InvalidateRect_(GadgetID,#WM_SETREDRAW,0,1)
#False sperrt das Neuzeichnen:
Code: Alles auswählen
If OpenWindow(0, 0, 0, 220, 220, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(0, 10, 10, 200, 200)
SendMessage_(GadgetID(0),#WM_SETREDRAW,#False,0)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget And EventGadget() = 0
If EventType() = #PB_EventType_LeftButtonDown Or (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(0, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
If StartDrawing(CanvasOutput(0))
x = GetGadgetAttribute(0, #PB_Canvas_MouseX)
y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
Circle(x, y, 10, RGB(Random(255), Random(255), Random(255)))
StopDrawing()
EndIf
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
EDIT: Während #WM_SETREDRAW gesperrt ist, geht CanvasOutput() nicht.
Was Du mal probieren kannst: Zeichne auf ein Bild statt auf das CanvasGadget
und setze danach die neue Größe des CanvasGadget und Dein neues Bild.
Code: Alles auswählen
SendMessage_(GadgetID(0),#WM_SETREDRAW,#False,0)
ResizeGadget(0,10,10,400,400)
SetGadgetAttribute(0,#PB_Canvas_Image,ImageID(0))
SendMessage_(GadgetID(0),#WM_SETREDRAW,#True,0)
InvalidateRect_(GadgetID(0),0,1)
Zeichnen und dann F1 drücken zum anzeigen:
Code: Alles auswählen
If OpenWindow(0, 0, 0, 420, 420, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(0, 10, 10, 200, 200)
CreateImage(0,400,400)
AddKeyboardShortcut(0,#PB_Shortcut_F1,1)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget And EventGadget() = 0
If EventType() = #PB_EventType_LeftButtonDown Or (EventType() = #PB_EventType_MouseMove) ;And GetGadgetAttribute(0, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
If StartDrawing(ImageOutput(0))
x = GetGadgetAttribute(0, #PB_Canvas_MouseX)*2
y = GetGadgetAttribute(0, #PB_Canvas_MouseY)*2
Circle(x, y, 10, RGB(Random(255), Random(255), Random(255)))
StopDrawing()
EndIf
EndIf
ElseIf Event = #PB_Event_Menu
SendMessage_(GadgetID(0),#WM_SETREDRAW,#False,0)
ResizeGadget(0,10,10,400,400)
SetGadgetAttribute(0,#PB_Canvas_Image,ImageID(0))
SendMessage_(GadgetID(0),#WM_SETREDRAW,#True,0)
InvalidateRect_(GadgetID(0),0,1)
EndIf
Until Event = #PB_Event_CloseWindow
EndIf