kurzfristig Repaint bei Gadget verhindern
Verfasst: 20.08.2012 11:26
Hallo.
Wie kann ich (auch per WinApi) kurzfristig das Repaint Event ausschalten ?
Es geht darum, ein Window per AnimateWindow_() ein/auszublenden, auf dem ein Canvas ist,
Allerdings flackert das Canvas oft während der Animation.
Daher wäre jetzt meine Idee, vor der Animation das "Repaint" abschalten und danach wieder einschalten...
Hier der Code, um den es sich dreht :
Hat da jemand eine Idee ? Wenn ja welche ?
P.S. : Achja... damit das Window "ausklappt", die Maus an den oberen Bildschirmrand bewegen und mind. 500ms dort stehen lassen
Wie kann ich (auch per WinApi) kurzfristig das Repaint Event ausschalten ?
Es geht darum, ein Window per AnimateWindow_() ein/auszublenden, auf dem ein Canvas ist,
Allerdings flackert das Canvas oft während der Animation.
Daher wäre jetzt meine Idee, vor der Animation das "Repaint" abschalten und danach wieder einschalten...
Hier der Code, um den es sich dreht :
Code: Alles auswählen
Enumeration 1 ; Windows
#MainWin
EndEnumeration
Enumeration 1
#MCanvas
EndEnumeration
Procedure DrawMainCanvas()
If StartDrawing(CanvasOutput(#MCanvas))
DrawingMode(#PB_2DDrawing_Default|#PB_2DDrawing_Gradient)
BackColor( $7a7a7a ) : FrontColor( $303030 )
LinearGradient(0,0,0,OutputHeight())
Box(0, 0, OutputWidth(), OutputHeight(), 0)
DrawingMode(#PB_2DDrawing_Default)
Line(0, OutputHeight()-1, OutputWidth(), 1, #Black)
StopDrawing()
EndIf
EndProcedure
OpenWindow(#MainWin, 0, 0, GetSystemMetrics_(#SM_CXSCREEN), 42, "TestWindow", #PB_Window_BorderLess|#PB_Window_Invisible)
CanvasGadget(#MCanvas, 0,0,WindowWidth(#MainWin),WindowHeight(#MainWin))
DrawMainCanvas()
WindowState = #False
Repeat
Event = WaitWindowEvent(25)
mx = DesktopMouseX() : my = DesktopMouseY()
If my <= 0 And WindowState = #False And TimerStart = #False
TimerStart = #True
AddWindowTimer(#MainWin, 10, 500)
Else
WinRect.RECT
GetWindowRect_(WindowID(#MainWin), @WinRect)
If my > WinRect\bottom
AnimateWindow_(WindowID(#MainWin), 150, #AW_HIDE|#AW_VER_NEGATIVE)
WindowState = #False
TimerStart = #False
EndIf
EndIf
If Event = #PB_Event_Timer
If EventTimer() = 10
If my <= 0 And WindowState = #False
AnimateWindow_(WindowID(#MainWin), 150, #AW_ACTIVATE|#AW_VER_POSITIVE)
WindowState = #True
RemoveWindowTimer(#MainWin, 10)
EndIf
EndIf
EndIf
Until Quit > 0
P.S. : Achja... damit das Window "ausklappt", die Maus an den oberen Bildschirmrand bewegen und mind. 500ms dort stehen lassen
