http://www.purebasic.fr/english/viewtop ... 91#p329298
Ce code permettait de masquer le curseur au dessus d'un gadget.
J'ai repris l'idée pour, non plus masquer, mais modifier le curseur quand on survole un gadget
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4.50
;
; Explication du programme :
; Changer le curseur de la souris au dessus d'un gadget
Procedure SetGadgetCursor_SubClassProc(hwnd, msg, wparam, lparam)
Protected oldproc, Cursor
oldproc = GetProp_(hwnd, "oldproc")
Select msg
Case #WM_NCDESTROY
RemoveProp_(hwnd, "oldproc")
RemoveProp_(hwnd, "cursor")
Case #WM_SETCURSOR
Cursor = GetProp_(hwnd, "cursor")
SetCursor_(Cursor)
ProcedureReturn 0
EndSelect
ProcedureReturn CallWindowProc_(oldproc, hwnd, msg, wparam, lparam)
EndProcedure
Procedure SetGadgetCursor(Gadget, Cursor) ; Change le curseur de la souris au dessus d'un Gadget
If GetProp_(GadgetID(Gadget), "cursor")
RemoveProp_(GadgetID(Gadget), "cursor")
EndIf
SetProp_(GadgetID(Gadget), "cursor", Cursor)
If GetProp_(GadgetID(Gadget), "oldproc") = 0
SetProp_(GadgetID(Gadget), "oldproc", SetWindowLongPtr_(GadgetID(Gadget), #GWL_WNDPROC, @SetGadgetCursor_SubClassProc()))
EndIf
SendMessage_(GadgetID(Gadget), #WM_SETCURSOR , 0, 0)
EndProcedure
Enumeration
#Bouton
EndEnumeration
; Valeurs possibles pour le curseur :
#IDC_ARROW = 32512 ; la flèche (le curseur normal)
#IDC_IBEAM = 32513 ; curseur sélection de texte
#IDC_UPARROW = 32516 ; flèche qui pointe vers le haut
#IDC_APPSTARTING = 32650 ; curseur attente (flèche + sablier)
#IDC_WAIT = 32514 ; curseur occupé (sablier)
#IDC_CROSS = 32515 ; curseur précision de la sélection (croix)
#IDC_SIZENWSE = 32642 ; curseur de dimensionnment, pointe le NordOuest et le SudEst
#IDC_SIZENESW = 32643 ; curseur de dimensionnment, pointe le NE et le SO
#IDC_SIZEWE = 32644 ; curseur de dimensionnment, pointe le E et le O
#IDC_SIZENS = 32645 ; curseur de dimensionnment, pointe le N et le S
#IDC_SIZEALL = 32646 ; curseur de déplacement, pointe le N, S, E et O
#IDC_HELP = 32651 ; curseur aide
#IDC_HAND = 32649 ; curseur main
#IDC_NO = 32648 ; curseur "interdit" (panneau d'interdiction)
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, "SetGadgetCursor", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
End
EndIf
ButtonGadget(#Bouton, 20, 20, 128, 128, "Nouveau curseur")
Curseur = LoadCursor_(0, #IDC_HAND) ; Charge le curseur
SetGadgetCursor(#Bouton, Curseur) ; Applique le curseur au gadget
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Menu
Select EventMenu() ; Menus
EndSelect
Case #PB_Event_Gadget
Select EventGadget() ; Gadgets
Case #Bouton
DestroyCursor_(Curseur) ; Supprime l'ancien curseur
Curseur = LoadCursor_(0, #IDC_WAIT) ; Charge le curseur
SetGadgetCursor(#Bouton, Curseur) ; Applique le curseur au gadget
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
DestroyCursor_(Curseur) ; Supprime le curseur