Advanced Gadgets - einfärben mit Vista Skin

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
RocketRider
Beiträge: 109
Registriert: 10.12.2004 19:27
Kontaktdaten:

Advanced Gadgets - einfärben mit Vista Skin

Beitrag 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
GreenForce-Player - Der alternative Media Player!
Wie viele Tage sind es von Halloween bis Weihnachten?
Okt 31 - Dez 25 = 0 Tage!
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag von X360 Andy »

Eigentlich sehr geil, nur flimmert das ganze zu start / sichtlich.
Win7 32Bit
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Beitrag 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
Ich habe keine Lösung, aber ich bewundere das Problem.
PMTheQuick
Beiträge: 630
Registriert: 05.05.2005 19:06

Beitrag von PMTheQuick »

Windows 7 Ultimate 32bit - Flimmert ebenfalls sehr deutlich... Aber ohne dieses flimmern wärs top! :allright:

Gruss
PMTheQuick ;-)
Rokur
Beiträge: 167
Registriert: 29.12.2005 09:58
Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)

Beitrag 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.
WinXP 32 Bit, PureBasic 4.40 (x86)
walker
Beiträge: 278
Registriert: 29.08.2004 18:39
Wohnort: Bayern

Beitrag 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
Zuletzt geändert von walker am 27.08.2009 19:16, insgesamt 2-mal geändert.
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag von X360 Andy »

Keine Veränderung bei mir, zum "alten" Code.

Win7 32Bit
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Beitrag von Deluxe0321 »

Bei mir schon. Das ganze ist nun wirklich in Projekte einbaubar ;)

Grüße Marv
Ich habe keine Lösung, aber ich bewundere das Problem.
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag von X360 Andy »

Naja wenns nur für dich ist, kann man es verwenden aber wenn du die Anwendung Puplic machst wohl kaum.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag 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
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Antworten