Seite 1 von 2

Advanced Gadgets - einfärben mit Vista Skin

Verfasst: 25.08.2009 19:05
von RocketRider
Hallo
Ich habe ein paar Funktionen für Advanced Gadgets geschrieben.
Hierbei lassen sich Buttons und ProgressBars einfärben, dies auch mit einem Speziellen Windows Skin.
Es sollte in den Compiler Optionen der XP Skin aktiviert werden.
Bild

Code: Alles auswählen

;**************************** 
;***   Advanced Gadgets   ***
;***    Licence:  Zlib    *** 
;**************************** 
;*** (c) 2009 RocketRider *** 
;***    RocketRider.eu    *** 
;**************************** 
;***    PureBasic 4.40    *** 
;***      25.08.2009      ***
;****************************
;Copyright (c) 2009 RocketRider
;This software is provided 'as-is', without any express Or implied warranty. In no event will the authors be held liable For any damages arising from the use of this software.
;Permission is granted To anyone To use this software For any purpose, including commercial applications, And To alter it And redistribute it freely, subject To the following restrictions:
;The origin of this software must Not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
;Altered source versions must be plainly marked As such, And must Not be misrepresented As being the original software.
;This notice may Not be removed Or altered from any source distribution.




Procedure SetImageGammacorrection(hWnd,RedGamma,GreenGamma,BlueGamma,Colorfullness, Brightness, Contrast)
  If RedGamma < 2500:RedGamma = 2500:EndIf
  If RedGamma > 65000:RedGamma = 65000:EndIf
  
  If GreenGamma < 2500:GreenGamma = 2500:EndIf
  If GreenGamma > 65000:GreenGamma = 65000:EndIf
  
  If BlueGamma < 2500:BlueGamma = 2500:EndIf
  If BlueGamma > 65000:BlueGamma = 65000:EndIf
  
  If Colorfullness < -100:Colorfullness = -100:EndIf
  If Colorfullness >  100:Colorfullness =  100:EndIf

  If Brightness < -100:Brightness = -100:EndIf
  If Brightness >  100:Brightness =  100:EndIf
  
  If Contrast < -100:Contrast = -100:EndIf
  If Contrast >  100:Contrast =  100:EndIf  
  
  
  GetWindowRect_(hWnd,re.rect)
  DC=GetWindowDC_(hWnd)
 
  SetStretchBltMode_(DC,#HALFTONE)
  GetColorAdjustment_(DC,C.COLORADJUSTMENT)
  C\caRedGamma=RedGamma
  C\caGreenGamma=GreenGamma
  C\caBlueGamma=BlueGamma
  
  C\caColorfulness = Colorfullness
  C\caBrightness = Brightness
  C\caContrast = Contrast

  SetColorAdjustment_(DC,C.COLORADJUSTMENT)
  
  StretchBlt_(DC,0,0,re\right - re\left ,re\bottom -re\top ,DC,0,0,re\right - re\left ,re\bottom -re\top ,#SRCCOPY)
  ReleaseDC_(hWnd,DC)
EndProcedure


Procedure AdvGadgetCB(hWnd,Msg,w,l)

    CB.l = GetProp_(hWnd, "ADVGADGET_CALLBACK")
    If CB
      Result = CallFunctionFast(CB,hWnd,Msg,w,l)
    Else
      Result = DefWindowProc_(hWnd,Msg,w,l)
    EndIf

  If GetProp_(hWnd, "ADVGADGET_BUTTON")
    If Msg = #WM_PAINT Or Msg = #WM_LBUTTONDOWN Or Msg = #WM_LBUTTONUP Or Msg = #WM_LBUTTONDBLCLK
      SetImageGammacorrection(hWnd,GetProp_(hWnd, "ADVGADGET_GAMMARED"),GetProp_(hWnd, "ADVGADGET_GAMMAGREEN"),GetProp_(hWnd, "ADVGADGET_GAMMABLUE"),GetProp_(hWnd, "ADVGADGET_COLOR"),GetProp_(hWnd, "ADVGADGET_BRIGHTNESS"), GetProp_(hWnd, "ADVGADGET_CONTRAST"))
    EndIf
  EndIf

  If GetProp_(hWnd, "ADVGADGET_PROGRESSBAR")
  
    If Msg=#WM_PAINT
      SetImageGammacorrection(hWnd,GetProp_(hWnd, "ADVGADGET_GAMMARED"),GetProp_(hWnd, "ADVGADGET_GAMMAGREEN"),GetProp_(hWnd, "ADVGADGET_GAMMABLUE"),GetProp_(hWnd, "ADVGADGET_COLOR"),GetProp_(hWnd, "ADVGADGET_BRIGHTNESS"), GetProp_(hWnd, "ADVGADGET_CONTRAST"))
    EndIf
  EndIf

ProcedureReturn Result
EndProcedure



#PB_AdvProgressBar_Smooth = #PB_ProgressBar_Smooth
#PB_AdvProgressBar_Vertical = #PB_ProgressBar_Vertical
#PB_AdvProgressBar_Marquee = $40A
; RedGamma, GreenGamma and BlueGamma must be between 2500 and 65000 (Default is 10000)
; Colorfullness, Brightness and Contrast must be between -100 and 100 (Default is 0)
Procedure AdvProgressBarGadget(Gadget,x,y,width,height,minimum,maximum, flags, RedGamma = 10000,GreenGamma = 10000,BlueGamma = 10000,Colorfullness = 0, Brightness = 0, Contrast = 0)

If Gadget <> #PB_Any
  Result = ProgressBarGadget(Gadget,x,y,width,height,minimum,maximum, flags)
  ID = Gadget
Else
  Result = ProgressBarGadget(Gadget,x,y,width,height,minimum,maximum, flags)
  Gadget = Result
EndIf

If Result

  hWnd = GadgetID(ID)
  If flags & #PB_AdvProgressBar_Marquee
    SendMessage_(hWnd,#PB_AdvProgressBar_Marquee, #True, 50)
  EndIf
  
  SetProp_(hWnd, "ADVGADGET_PROGRESSBAR", #True)
  SetProp_(hWnd, "ADVGADGET_CALLBACK",SetWindowLong_(hWnd,#GWL_WNDPROC,@AdvGadgetCB()))
  SetProp_(hWnd, "ADVGADGET_GAMMARED", RedGamma)
  SetProp_(hWnd, "ADVGADGET_GAMMAGREEN", GreenGamma)
  SetProp_(hWnd, "ADVGADGET_GAMMABLUE", BlueGamma)
  SetProp_(hWnd, "ADVGADGET_COLOR", Colorfullness)
  SetProp_(hWnd, "ADVGADGET_BRIGHTNESS", Brightness)
  SetProp_(hWnd, "ADVGADGET_CONTRAST",Contrast)
EndIf

ProcedureReturn Result
EndProcedure


#PB_AdvButton_Right = #PB_Button_Right
#PB_AdvButton_Left = #PB_Button_Left
#PB_AdvButton_Default = #PB_Button_Default
#PB_AdvButton_MultiLine = #PB_Button_MultiLine
#PB_AdvButton_Toggle = #PB_Button_Toggle

; RedGamma, GreenGamma and BlueGamma must be between 2500 and 65000 (Default is 10000)
; Colorfullness, Brightness and Contrast must be between -100 and 100 (Default is 0)
Procedure AdvButtonGadget(Gadget,x,y,width,height, text.s, flags, RedGamma = 10000,GreenGamma = 10000,BlueGamma = 10000,Colorfullness = 0, Brightness = 0, Contrast = 0)

If Gadget <> #PB_Any
  Result = ButtonGadget(Gadget,x,y,width,height,text.s, flags)
  ID = Gadget
Else
  Result = ButtonGadget(Gadget,x,y,width,height,text.s, flags)
  Gadget = Result
EndIf

If Result
  hWnd = GadgetID(ID)
  
  SetProp_(hWnd, "ADVGADGET_BUTTON", #True)
  SetProp_(hWnd, "ADVGADGET_CALLBACK",SetWindowLong_(hWnd,#GWL_WNDPROC,@AdvGadgetCB()))
  SetProp_(hWnd, "ADVGADGET_GAMMARED", RedGamma)
  SetProp_(hWnd, "ADVGADGET_GAMMAGREEN", GreenGamma)
  SetProp_(hWnd, "ADVGADGET_GAMMABLUE", BlueGamma)
  SetProp_(hWnd, "ADVGADGET_COLOR", Colorfullness)
  SetProp_(hWnd, "ADVGADGET_BRIGHTNESS", Brightness)
  SetProp_(hWnd, "ADVGADGET_CONTRAST",Contrast)
EndIf

ProcedureReturn Result
EndProcedure



;Example:
;Exable XP Skin support!
If OpenWindow(0, 0, 0, 500, 200, "AdvGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

  
  ;Button with more contrast
  AdvButtonGadget(0, 10, 10, 100, 22, "Silver Button",#PB_Button_Default,10000,10000,10000,0,-100,25)
  
  ;blue button
  AdvButtonGadget(1, 10, 40, 100, 22, "blue Button",#PB_Button_Default,20000,20000,2500,0,0,0)    

  ;red button
  AdvButtonGadget(2, 10, 70, 100, 22, "red Button",#PB_Button_Default,2500,65000,65000,0,0,0)    

  ;another silver button
  AdvButtonGadget(4, 10, 100, 100, 22, "Silver Button",#PB_Button_Default,65000,65000,65000,0,-50,50)  
  
  ;green button
  AdvButtonGadget(3, 10, 130, 100, 22, "green Button",#PB_Button_Default,65000,2500,65000,-20,-30,0)    

  AdvProgressBarGadget(5,150,10,200,25,0,100, #PB_AdvProgressBar_Marquee, 2500, 65000,65000,0,0,0)

  AdvProgressBarGadget(6,150,40,200,25,0,100, 0, 65000, 65000,65000,-100,50,0)
  SetGadgetState(6, 55)
  
  AdvProgressBarGadget(7,150,70,200,25,0,100, 0, 65000, 65000,6500,0,50,50)
  SetGadgetState(7, 75)

  AdvProgressBarGadget(8,150,100,200,25,0,100, 0, 65000, 65000,65000,-30,-20,70)
  SetGadgetState(8, 55)

  AdvProgressBarGadget(9,150,130,200,25,0,100, 0, 10000, 10000,2500,-100,-90,20)
  SetGadgetState(9, 85)
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Gruß
RocketRider

Verfasst: 25.08.2009 19:35
von X360 Andy
Eigentlich sehr geil, nur flimmert das ganze zu start / sichtlich.
Win7 32Bit

Verfasst: 25.08.2009 23:20
von Deluxe0321
XP SP3
Beim mir flimert eigentlich garnichts, nur der Redraw ist z.B. beim verschieben über den Desktoprand unschön (farbveränderungen usw..)

Grüße Marv

Verfasst: 26.08.2009 12:43
von PMTheQuick
Windows 7 Ultimate 32bit - Flimmert ebenfalls sehr deutlich... Aber ohne dieses flimmern wärs top! :allright:

Gruss
PMTheQuick ;-)

Verfasst: 26.08.2009 12:54
von Rokur
WinXP Prof. 32Bit SP3 bei Classic-Skin
1) kein Flimmern bei deaktiviertem XP-Skin (animierte Progressbar ist dann leer)
2) Flimmern bei aktiviertem XP-Skin in der animierten Progressbar
3) Repaint funktioniert nicht

zu 3)
Wird das Fenster z.B. zur Hälfte über den Bildschirmrand hinausgeschoben, dann gibt es sehr hässliche Farbeffekte, welche nicht mehr verschwinden, wenn das Fenster wieder im sichtbaren Bereich ist. Evtl. müsste man das Neuzeichnen im Repaint-Event selbst übernehmen.

Verfasst: 26.08.2009 17:17
von walker
hab den Code mal so erweitert (callback) damit das redraw problem nicht mehr auftritt.... (getestet auf winXP SP2)

Code: Alles auswählen

;****************************
;***   Advanced Gadgets   ***
;***    Licence:  Zlib    ***
;****************************
;*** (c) 2009 RocketRider ***
;***    RocketRider.eu    ***
;****************************
;***    PureBasic 4.40    ***
;***      25.08.2009      ***
;****************************
;Copyright (c) 2009 RocketRider
;This software is provided 'as-is', without any express Or implied warranty. In no event will the authors be held liable For any damages arising from the use of this software.
;Permission is granted To anyone To use this software For any purpose, including commercial applications, And To alter it And redistribute it freely, subject To the following restrictions:
;The origin of this software must Not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
;Altered source versions must be plainly marked As such, And must Not be misrepresented As being the original software.
;This notice may Not be removed Or altered from any source distribution.




Procedure SetImageGammacorrection(hWnd, RedGamma, GreenGamma, BlueGamma, Colorfullness, Brightness, Contrast)
    If RedGamma < 2500:RedGamma = 2500:EndIf
    If RedGamma > 65000:RedGamma = 65000:EndIf

    If GreenGamma < 2500:GreenGamma = 2500:EndIf
    If GreenGamma > 65000:GreenGamma = 65000:EndIf

    If BlueGamma < 2500:BlueGamma = 2500:EndIf
    If BlueGamma > 65000:BlueGamma = 65000:EndIf

    If Colorfullness < -100:Colorfullness = -100:EndIf
    If Colorfullness >  100:Colorfullness =  100:EndIf

    If Brightness < -100:Brightness = -100:EndIf
    If Brightness >  100:Brightness =  100:EndIf

    If Contrast < -100:Contrast = -100:EndIf
    If Contrast >  100:Contrast =  100:EndIf


    GetWindowRect_(hWnd, re.rect)
    DC = GetWindowDC_(hWnd)

    SetStretchBltMode_(DC, #HALFTONE)
    GetColorAdjustment_(DC, C.COLORADJUSTMENT)
    C\caRedGamma   = RedGamma
    C\caGreenGamma = GreenGamma
    C\caBlueGamma  = BlueGamma

    C\caColorfulness = Colorfullness
    C\caBrightness   = Brightness
    C\caContrast     = Contrast

    SetColorAdjustment_(DC, C.COLORADJUSTMENT)

    StretchBlt_(DC, 0, 0, re\right - re\left, re\bottom - re\top, DC, 0, 0, re\right - re\left, re\bottom - re\top, #SRCCOPY)
    ReleaseDC_(hWnd, DC)
EndProcedure


Procedure AdvGadgetCB(hWnd, Msg, w, l)

    CB.l = GetProp_(hWnd, "ADVGADGET_CALLBACK")
    If CB
        Result = CallFunctionFast(CB, hWnd, Msg, w, l)
    Else
        Result = DefWindowProc_(hWnd, Msg, w, l)
    EndIf

    If GetProp_(hWnd, "ADVGADGET_BUTTON")
        If Msg = #WM_PAINT Or Msg = #WM_LBUTTONDOWN Or Msg = #WM_LBUTTONUP Or Msg = #WM_LBUTTONDBLCLK
            SetImageGammacorrection(hWnd, GetProp_(hWnd, "ADVGADGET_GAMMARED"), GetProp_(hWnd, "ADVGADGET_GAMMAGREEN"), GetProp_(hWnd, "ADVGADGET_GAMMABLUE"), GetProp_(hWnd, "ADVGADGET_COLOR"), GetProp_(hWnd, "ADVGADGET_BRIGHTNESS"), GetProp_(hWnd, "ADVGADGET_CONTRAST"))
        EndIf
    EndIf

    If GetProp_(hWnd, "ADVGADGET_PROGRESSBAR")

        If Msg = #WM_PAINT
            SetImageGammacorrection(hWnd, GetProp_(hWnd, "ADVGADGET_GAMMARED"), GetProp_(hWnd, "ADVGADGET_GAMMAGREEN"), GetProp_(hWnd, "ADVGADGET_GAMMABLUE"), GetProp_(hWnd, "ADVGADGET_COLOR"), GetProp_(hWnd, "ADVGADGET_BRIGHTNESS"), GetProp_(hWnd, "ADVGADGET_CONTRAST"))
        EndIf
    EndIf

    ProcedureReturn Result
EndProcedure



#PB_AdvProgressBar_Smooth   = #PB_ProgressBar_Smooth
#PB_AdvProgressBar_Vertical = #PB_ProgressBar_Vertical
#PB_AdvProgressBar_Marquee  = $40A
; RedGamma, GreenGamma and BlueGamma must be between 2500 and 65000 (Default is 10000)
; Colorfullness, Brightness and Contrast must be between -100 and 100 (Default is 0)
Procedure AdvProgressBarGadget(Gadget, x, y, width, height, minimum, maximum, flags, RedGamma = 10000, GreenGamma = 10000, BlueGamma = 10000, Colorfullness = 0, Brightness = 0, Contrast = 0)

    If Gadget <> #PB_Any
        Result = ProgressBarGadget(Gadget, x, y, width, height, minimum, maximum, flags)
        ID     = Gadget
    Else
        Result = ProgressBarGadget(Gadget, x, y, width, height, minimum, maximum, flags)
        Gadget = Result
    EndIf

    If Result

        hWnd = GadgetID(ID)
        If flags & #PB_AdvProgressBar_Marquee
            SendMessage_(hWnd, #PB_AdvProgressBar_Marquee, #True, 50)
        EndIf

        SetProp_(hWnd, "ADVGADGET_PROGRESSBAR", #True)
        SetProp_(hWnd, "ADVGADGET_CALLBACK", SetWindowLong_(hWnd, #GWL_WNDPROC, @AdvGadgetCB()))
        SetProp_(hWnd, "ADVGADGET_GAMMARED", RedGamma)
        SetProp_(hWnd, "ADVGADGET_GAMMAGREEN", GreenGamma)
        SetProp_(hWnd, "ADVGADGET_GAMMABLUE", BlueGamma)
        SetProp_(hWnd, "ADVGADGET_COLOR", Colorfullness)
        SetProp_(hWnd, "ADVGADGET_BRIGHTNESS", Brightness)
        SetProp_(hWnd, "ADVGADGET_CONTRAST", Contrast)
    EndIf

    ProcedureReturn Result
EndProcedure


#PB_AdvButton_Right     = #PB_Button_Right
#PB_AdvButton_Left      = #PB_Button_Left
#PB_AdvButton_Default   = #PB_Button_Default
#PB_AdvButton_MultiLine = #PB_Button_MultiLine
#PB_AdvButton_Toggle    = #PB_Button_Toggle

; RedGamma, GreenGamma and BlueGamma must be between 2500 and 65000 (Default is 10000)
; Colorfullness, Brightness and Contrast must be between -100 and 100 (Default is 0)
Procedure AdvButtonGadget(Gadget, x, y, width, height, text.s, flags, RedGamma = 10000, GreenGamma = 10000, BlueGamma = 10000, Colorfullness = 0, Brightness = 0, Contrast = 0)

    If Gadget <> #PB_Any
        Result = ButtonGadget(Gadget, x, y, width, height, text.s, flags)
        ID     = Gadget
    Else
        Result = ButtonGadget(Gadget, x, y, width, height, text.s, flags)
        Gadget = Result
    EndIf

    If Result
        hWnd = GadgetID(ID)

        SetProp_(hWnd, "ADVGADGET_BUTTON", #True)
        SetProp_(hWnd, "ADVGADGET_CALLBACK", SetWindowLong_(hWnd, #GWL_WNDPROC, @AdvGadgetCB()))
        SetProp_(hWnd, "ADVGADGET_GAMMARED", RedGamma)
        SetProp_(hWnd, "ADVGADGET_GAMMAGREEN", GreenGamma)
        SetProp_(hWnd, "ADVGADGET_GAMMABLUE", BlueGamma)
        SetProp_(hWnd, "ADVGADGET_COLOR", Colorfullness)
        SetProp_(hWnd, "ADVGADGET_BRIGHTNESS", Brightness)
        SetProp_(hWnd, "ADVGADGET_CONTRAST", Contrast)
    EndIf

    ProcedureReturn Result
EndProcedure

Procedure mycallback(hwnd, message, lparm, wparam)

    Select message
        Case #WM_PAINT, #WM_MOVE
            InvalidateRect_(hwnd, r, 0)
    EndSelect

    ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

;Example:
;Exable XP Skin support!
If OpenWindow(0, 0, 0, 500, 200, "AdvGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)


    ;Button with more contrast
    AdvButtonGadget(0, 10, 10, 100, 22, "Silver Button", #PB_Button_Default, 10000, 10000, 10000, 0, -100, 25)

    ;blue button
    AdvButtonGadget(1, 10, 40, 100, 22, "blue Button", #PB_Button_Default, 20000, 20000, 2500, 0, 0, 0)

    ;red button
    AdvButtonGadget(2, 10, 70, 100, 22, "red Button", #PB_Button_Default, 2500, 65000, 65000, 0, 0, 0)

    ;another silver button
    AdvButtonGadget(4, 10, 100, 100, 22, "Silver Button", #PB_Button_Default, 65000, 65000, 65000, 0, -50, 50)

    ;green button
    AdvButtonGadget(3, 10, 130, 100, 22, "green Button", #PB_Button_Default, 65000, 2500, 65000, -20, -30, 0)

    AdvProgressBarGadget(5, 150, 10, 200, 25, 0, 100, #PB_AdvProgressBar_Marquee, 2500, 65000, 65000, 0, 0, 0)

    AdvProgressBarGadget(6, 150, 40, 200, 25, 0, 100, 0, 65000, 65000, 65000, -100, 50, 0)
    SetGadgetState(6, 55)

    AdvProgressBarGadget(7, 150, 70, 200, 25, 0, 100, 0, 65000, 65000, 6500, 0, 50, 50)
    SetGadgetState(7, 75)

    AdvProgressBarGadget(8, 150, 100, 200, 25, 0, 100, 0, 65000, 65000, 65000, -30, -20, 70)
    SetGadgetState(8, 55)

    AdvProgressBarGadget(9, 150, 130, 200, 25, 0, 100, 0, 10000, 10000, 2500, -100, -90, 20)
    SetGadgetState(9, 85)

    SetWindowCallback(@mycallback())

    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Verfasst: 27.08.2009 01:45
von X360 Andy
Keine Veränderung bei mir, zum "alten" Code.

Win7 32Bit

Verfasst: 27.08.2009 15:18
von Deluxe0321
Bei mir schon. Das ganze ist nun wirklich in Projekte einbaubar ;)

Grüße Marv

Verfasst: 27.08.2009 17:08
von X360 Andy
Naja wenns nur für dich ist, kann man es verwenden aber wenn du die Anwendung Puplic machst wohl kaum.

Verfasst: 27.08.2009 18:04
von hjbremer
so ist es bei mir besser

Code: Alles auswählen

Procedure SetImageGammacorrection(hWnd, RedGamma, GreenGamma, BlueGamma, Colorfullness, Brightness, Contrast) 
    If RedGamma < 2500:RedGamma = 2500:EndIf 
    If RedGamma > 65000:RedGamma = 65000:EndIf 

    If GreenGamma < 2500:GreenGamma = 2500:EndIf 
    If GreenGamma > 65000:GreenGamma = 65000:EndIf 

    If BlueGamma < 2500:BlueGamma = 2500:EndIf 
    If BlueGamma > 65000:BlueGamma = 65000:EndIf 

    If Colorfullness < -100:Colorfullness = -100:EndIf 
    If Colorfullness >  100:Colorfullness =  100:EndIf 

    If Brightness < -100:Brightness = -100:EndIf 
    If Brightness >  100:Brightness =  100:EndIf 

    If Contrast < -100:Contrast = -100:EndIf 
    If Contrast >  100:Contrast =  100:EndIf 


    GetWindowRect_(hWnd, re.rect)
    re\top + 2
    re\left + 2
    re\right - 4
    re\bottom - 4 
    DC = GetWindowDC_(hWnd) 

    SetStretchBltMode_(DC, #HALFTONE) 
    GetColorAdjustment_(DC, C.COLORADJUSTMENT) 
    C\caRedGamma   = RedGamma 
    C\caGreenGamma = GreenGamma 
    C\caBlueGamma  = BlueGamma 

    C\caColorfulness = Colorfullness 
    C\caBrightness   = Brightness 
    C\caContrast     = Contrast 

    SetColorAdjustment_(DC, C.COLORADJUSTMENT) 

    StretchBlt_(DC, 3, 3, re\right - re\left, re\bottom - re\top, DC, 3, 3, re\right - re\left, re\bottom - re\top, #SRCCOPY) 
    ReleaseDC_(hWnd, DC) 
EndProcedure 
der Callback ist überflüssig