Problème avec #BS_OWNERDRAW et Checkbox

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Problème avec #BS_OWNERDRAW et Checkbox

Message par Progi1984 »

Voilà, j'ai pris ce code sur le forum allemand. Je voudrais voir comment skinner une checkbox mais le problème c'est que le state reste toujours à 0. Alors qu'il devrait passer automatiquement de 1 à 0.

Merci

Code : Tout sélectionner

; ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;
; Author: Christian
; Modified : Progi1984
; Date: 22. December 2004
;
;
; ToDo:
; *****
; - #PB_Button_Multiline
; - #PB_Button_Toggle
;
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

; --> Constants
;#ODS_HOTLIGHT = 40

; --> This is needed for PB's drawing functions to work
 Structure PBDrawingStruct
  Type.l
  WindowHandle.l
  DC.l
  ReleaseProcedure.l
 EndStructure
 Global mydraw.PBDrawingStruct
 mydraw\Type = 1
 ;Global mydraw
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;                      Procedures
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

; --> Get the styles of a Gadget
Procedure.l GetStyle(GadgetID.l)
  ProcedureReturn GetWindowLong_(GadgetID, #GWL_STYLE)
EndProcedure

; --> Windowcallback
Procedure myWindowCallback(hwnd, msg, wparam, lparam)
  result = #PB_ProcessPureBasicEvents
  Select msg
   Case #WM_DRAWITEM
     ; -- Get handle and DeviceContext
     *lpdis.DRAWITEMSTRUCT = lparam
     mydraw\WindowHandle = *lpdis\hwndItem
     hDC = GetDC_(mydraw\WindowHandle)

     Width = *lpdis\rcItem\right-*lpdis\rcItem\left
     Height = *lpdis\rcItem\bottom-*lpdis\rcItem\top
   
     ; -- Start with OwnerDrawing
     Select *lpdis\CtlType
      Case #ODT_BUTTON
        ; -- Draw disabled button
        If *lpdis\itemState & #ODS_DISABLED
           If StartDrawing(mydraw)
            Box(0,0,Width, Height,RGB(255,0,0))
           StopDrawing()
           EndIf

        ; -- Draw toogled button
        ElseIf *lpdis\itemState & #ODS_SELECTED
           If StartDrawing(mydraw)
            Box(0,0,Width, Height,RGB(0,255,0))
           StopDrawing()
           EndIf
        Else
           ; -- Draw normal button
           If StartDrawing(mydraw)
            Box(0,0,Width, Height,RGB(0,0,255))
           StopDrawing()
           EndIf
        EndIf
        If *lpdis\itemState & #ODS_FOCUS
            ; -- Draw the FocusRect
            *lpdis\rcItem\left + 3
            *lpdis\rcItem\top + 3
            *lpdis\rcItem\right - 3
            *lpdis\rcItem\bottom - 3
            DrawFocusRect_(hDC, *lpdis\rcItem)
        EndIf

     EndSelect
     result = #True
  EndSelect
  ProcedureReturn result
EndProcedure

; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;                      Program
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

If OpenWindow(0, 0, 0, 300, 200, "Christians OwnerDrawn Buttons",#PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
  SetWindowCallback(@myWindowCallback())

  CheckBoxGadget(0, 50, 50, 200, 50, "Owner Drawn Button 1", #BS_OWNERDRAW)
  CheckBoxGadget(1, 50, 105, 200, 50, "Owner Drawn Button 2", #BS_OWNERDRAW)

;repeat : debug WaitwindowEvent() : forever
   Repeat
     event = WaitWindowEvent()
     Select event
       Case #PB_Event_Gadget
         Select EventGadget()
           Case 0
            Debug "Button 1 pressed!"
            Debug GetGadgetState(0)
           Case 1
            Debug "Button 2 pressed!"

         EndSelect
     EndSelect
   Until event = #PB_Event_CloseWindow
EndIf
End
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Quelqu'un ?
nn a512
Messages : 7
Inscription : ven. 31/mars/2006 22:16

Message par nn a512 »

Alors qu'il devrait passer automatiquement de 1 à 0.

Ne possible pas automatiquement.
Répondre