Tiens, j'ai retrouvé un code que j'avais posté il y a déjà bien longtemps
Mets tes icônes perso pour les tests.
Code : Tout sélectionner
; constantes
#index = 0
#Fenetre_principale = 1;#index : #index = #index + 1
#MonImage = 2;#index : #index = #index + 1
#MonImageCocher = 3;#index : #index = #index + 1
#MENU_Copier = 4;#index : #index = #index + 1
#MENU_Coller = 5;#index : #index = #index + 1
#MENU_Cocher = 6;#index : #index = #index + 1
#MENU_DeCocher = 7;#index : #index = #index + 1
#Menu = 8;#index : #index = #index + 1
#MF_BYCOMMAND = 0
#MF_BYPOSITION = $400
#SM_CXMENUCHECK = 71
#SM_CYMENUCHECK = 72
; Variable globale
Global MenuIdentificateurWIndows.l
;;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
;;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
Procedure AfficheIconeMenu(WIndowsMenuID,MenuId.l, ImageNormale.l, ImageCocher.l)
; WIndowsMenuID est le Handle du menu c'est à dire le numéro attribué par Windows au menu crée
; on récupère ce Handle lorsque l'on crée le menu;
; j'ai utilisé ceci : MenuIdentificateurWIndows = CreateMenu(#Menu, WindowID(#Fenetre_principale))
; MenuId est l'identificateur statique de l'élément du menu ou l'on veut afficher l'image
; pour cet exemple #MENU_Copier
; ImageNormale est l'image qui s'affichera en mode non coché (car on peut cocher un menu
; soit avec un espèce de v ou avec un petit rond plein ou dans le cas d'un menu avec une
; imagge, l'image en mode cochée sera différente de celle en mode non coché
; ImageCocher est l'image qui s'affichera en coché
SetMenuItemBitmaps_(WIndowsMenuID,MenuId, #MF_BYCOMMAND, ImageNormale, ImageCocher)
EndProcedure
;;/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
;;\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
If OpenWindow(#Fenetre_principale,100,100,500,300,#PB_Window_SystemMenu," Essai de Menus avec images")
; creation d'un menu
;; -------------------- menu Fichier --------------------------
; récupère le Handle du Menu
MenuIdentificateurWIndows = CreateMenu(#Menu, WindowID(#Fenetre_principale))
; teste que la création du menu a réussi, c'est-à-dire que createmenu retourne 0 si le menu
; n'a pas pu être crée
If MenuIdentificateurWIndows
MenuTitle("Fichier")
MenuItem(#MENU_Copier, "Copier")
MenuItem(#MENU_Coller, "Coller")
MenuBar()
MenuItem(#MENU_Cocher, "Cocher le menu Copier avec l'image correspondante")
MenuBar()
MenuItem(#MENU_DeCocher, "Décocher le menu Copier avec l'image correspondante")
;; ------------------------------------------------------------
EndIf
; on charge les images qui vont s'afficher à coté du menu copier en mode coché/décoché
Resultat.l = LoadImage(#MonImage , "C:\Program Files\Purebasic\Forum francais\B05_Cut.bmp")
Resultat2.l = LoadImage(#MonImageCocher, "C:\Program Files\Purebasic\Forum francais\B08_Delete.bmp")
; teste d'abord si les images ont bien été chargées
If resultat And Resultat2
; on récupère la taille max en X et en Y que l'on pourra afficher dans le menu
; sur mon ordi j'avais une image max de 13 pixels par 13 pixels
; on utilise l'API GetSystemMetrics avec le paramètre #SM_CXMENUCHECK et SM_CYMENUCHECK
; pour y arriver
TailleX.l = GetSystemMetrics_(#SM_CXMENUCHECK)
TailleY.l = GetSystemMetrics_(#SM_CYMENUCHECK)
; teste que les valeurs ne sont pas nulles car on va redimensionner l'image pour
; qu'elle ait la taille correcte
If TailleX And TailleY
EndIf
; ici on appelle la procédure qui va cocher le menu copier {AfficheIconeMenu()]
AfficheIconeMenu(MenuIdentificateurWIndows,#MENU_Copier,UseImage(#MonImage) ,UseImage(#MonImageCocher))
EndIf
EndIf
;; Boucle d'évènement de PB
Repeat
Select WaitWindowEvent()
Case #PB_EventCloseWindow ; teste si la croix en haut à droite a été enfoncée
QuitterLeProg = 1 ; si oui on quitte
Case #PB_Event_Menu ; on récupère les événement générés par les menus
Select EventGadgetID()
Case #MENU_Cocher ; si l'utilisateur a sélectionné le menu cocher l'image ...
; alors on affiche l'image en mode coché
SetMenuItemState(#MENU, #MENU_Copier, 1)
Case #MENU_DeCocher ; si l'utilisateur a sélectionné le menu décocher l'image ...
; alors on affiche l'image en mode decoché
SetMenuItemState(#MENU, #MENU_Copier, 0)
EndSelect
EndSelect
Until QuitterLeProg
End