Nunja, wenn ihr schonmal GetDC_ in einer langen schleife verwendet habt bemerkt ihr sicherlich, dass das Programm immer langsamer wird und der Arbeitsspeicherverbrauch drastisch steigt. Der Befehl GetDC_ reserviert also einen Speicherbereich. Diesen sollte man aber immer am Ende des Programms auch wieder Freigeben, denn sonst muss man rebooten, wenn man plötzlich nurnoch ganz langsam arbeiten kann.
So wäre es gut:
Code: Alles auswählen
#DC_ACTIVE = $1
#DC_SMALLCAP = $2
#DC_ICON = $4
#DC_TEXT = $8
#DC_INBUTTON = $10
#DC_GRADIENT = $20
If OpenWindow(0, 100, 200, 195, 260, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "PureBasic Window")
hDC = GetDC_(WindowID())
r.Rect
r\left = 0
r\top = 40
r\right = 200
r\bottom = r\top + GetSystemMetrics_(#SM_CYCAPTION)
DrawCaption_(WindowID(),hDC,r,#DC_GRADIENT|#DC_TEXT|#DC_ACTIVE|#DC_ICON)
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
Quit = 1
EndIf
Until Quit = 1
EndIf
ReleaseDC_(WindowID(), hDC)
End
Nur warum klappt dann nicht das hier:
Code: Alles auswählen
#DC_ACTIVE = $1
#DC_SMALLCAP = $2
#DC_ICON = $4
#DC_TEXT = $8
#DC_INBUTTON = $10
#DC_GRADIENT = $20
If OpenWindow(0, 100, 200, 195, 260, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "PureBasic Window")
hDC = StartDrawing(WindowOutput())
r.Rect
r\left = 0
r\top = 40
r\right = 200
r\bottom = r\top + GetSystemMetrics_(#SM_CYCAPTION)
DrawCaption_(WindowID(),hDC,r,#DC_GRADIENT|#DC_TEXT|#DC_ACTIVE|#DC_ICON)
StopDrawing()
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
Quit = 1
EndIf
Until Quit = 1
EndIf
End
Man kann sich StartDrawing ja eigentlich als ein etwas verändertes GetDC_() vorstellen und StopDrawing als ReleaseDC_()