begin process at 2012 02 13 20:59:07
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > MENU CRÉE DYNAMIQUEMENT (SANS PASSER PAR L'ASSISTANT DE VB)

MENU CRÉE DYNAMIQUEMENT (SANS PASSER PAR L'ASSISTANT DE VB)


 Information sur la source

Note :
9,6 / 10 - par 5 personnes
9,60 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Niveau :Débutant Date de création :07/11/2004 Vu / téléchargé :11 890 / 1 828

Auteur : DARKSIDIOUS

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (21)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
Cette source vous permet de créer des menus lors de l'éxécution et non lors de la création du projet avec l'assistant de VB.

Quel est l'intérêt demandez-vous ? Et bien imaginez un programme qui doit charger des menus de façon totalement dynamique car vous ne connaissez pas leurs contenus lors de la création (leur contenu peut par exemple être définis dans une dll ou un fichier), ou alors, imaginez un programme ayant besoin de 15 sous-menus qui chacun contient 15 sous-sous-menus dont certains ne doivent pas être affichés en permance ! Vous vous dites, c'est un peu tiré par les cheveux ! Et pourtant, cela m'est arrivé dans un projet de tri de flèches pour un prog de tir à l'arc ! De plus, cela permet d'économiser un tout petit peu de place au niveau de l'exe car les menus ne sont alors pas intégrés dans les ressources du prog, mais bel et bien crée lors de l'éxécution ! La fonction d'affichage des menus renvoie de plus l'ID du menu qui a été cliqué par l'utilisateur... pratique si vous voulez pouvoir faire réagir votre prog selon la sélection de l'utilisateur quand même ;)

Pour ce faire, j'utilise bien entendu les fonctions de l'API Windows concernant les menus.

Source

  • 'déclaration des constantes API privées à l'objet
  • Private Const MIIM_ID = &H2
  • Private Const MIIM_TYPE = &H10
  • Private Const MIIM_STATE = &H1
  • Private Const MIIM_SUBMENU = &H4
  • Private Const TPM_LEFTALIGN = &H0&
  • Private Const TPM_RETURNCMD = &H100&
  • Private Const TPM_RIGHTBUTTON = &H2&
  • Private Const MFT_RADIOCHECK = &H200&
  • Private Const MFT_CHECKED = &H8&
  • Private Const MFT_STRING = &H0
  • Private Const MFS_ENABLED = &H0
  • 'déclaration des types privés à l'objet
  • Private Type MENUITEMINFO
  • cbSize As Long
  • fMask As Long
  • fType As Long
  • fState As Long
  • wID As Long
  • hSubMenu As Long
  • hbmpChecked As Long
  • hbmpUnchecked As Long
  • dwItemData As Long
  • dwTypeData As String
  • cch As Long
  • End Type
  • Private Type POINTAPI
  • x As Long
  • y As Long
  • End Type
  • 'déclaration des fonctions API privées à l'objet
  • Private Declare Function CreatePopupMenu Lib "user32" () As Long
  • Private Declare Function InsertMenuItem Lib "user32.dll" Alias "InsertMenuItemA" (ByVal hMenu As Long, ByVal uItem As Long, ByVal fByPosition As Long, lpmii As MENUITEMINFO) As Long
  • Private Declare Function TrackPopupMenuEx Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal hwnd As Long, ByVal lptpm As Any) As Long
  • Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
  • Private Declare Function DestroyMenu Lib "user32" (ByVal hMenu As Long) As Long
  • Public Function AfficherMenu() As Long
  • '======================================================
  • 'Permet de créer le menu, puis de l'afficher
  • '
  • 'Renvoie l'ID du menu cliqué
  • 'Renvoie -1 en cas d'erreur
  • '======================================================
  • 'on active la routine de traitement d'erreur
  • On Error GoTo erreur0
  • 'déclaration des variables privées
  • Dim pMenuInfo As MENUITEMINFO 'définit les info de l'item de menu ajouté
  • Dim pPositionCurseur As POINTAPI 'stocke la position actuelle du curseur
  • Dim lHandleMenu As Long 'stocke le handle du menu
  • Dim lHandleSousMenu(1) As Long 'stocke les handles des sous-menus
  • Dim lHandleSousSousMenu(1) As Long 'stocke les handles des sous-sous-menus
  • 'on définit le handle du menu popup
  • Let lHandleMenu = CreatePopupMenu
  • Let lHandleSousMenu(0) = CreatePopupMenu
  • Let lHandleSousMenu(1) = CreatePopupMenu
  • Let lHandleSousSousMenu(0) = CreatePopupMenu
  • Let lHandleSousSousMenu(1) = CreatePopupMenu
  • 'on définit le nouveau sous-sous-menu :
  • With pMenuInfo
  • Let .cbSize = Len(pMenuInfo)
  • Let .fType = MFT_STRING
  • Let .fState = MFS_ENABLED
  • Let .dwTypeData = "Sous-Sous-Menu1"
  • Let .cch = Len(pMenuInfo.dwTypeData)
  • Let .wID = 100
  • Let .fMask = MIIM_ID Or MIIM_TYPE Or MIIM_STATE
  • End With
  • Call InsertMenuItem(lHandleSousMenu(0), 0, True, pMenuInfo)
  • 'on définit le nouveau sous-sous-menu :
  • With pMenuInfo
  • Let .cbSize = Len(pMenuInfo)
  • Let .fType = MFT_STRING
  • Let .fState = MFS_ENABLED
  • Let .dwTypeData = "Sous-Sous-Menu2"
  • Let .cch = Len(pMenuInfo.dwTypeData)
  • Let .wID = 101
  • Let .fMask = MIIM_ID Or MIIM_TYPE Or MIIM_STATE
  • End With
  • Call InsertMenuItem(lHandleSousMenu(0), 1, True, pMenuInfo)
  • 'on insère un nouveau menu dans le menu courant :
  • With pMenuInfo
  • Let .cbSize = Len(pMenuInfo)
  • Let .fType = MFT_STRING
  • Let .fState = MFS_ENABLED
  • Let .dwTypeData = "Sous-Menu1"
  • Let .cch = Len(pMenuInfo.dwTypeData)
  • Let .wID = 0
  • Let .fMask = MIIM_ID Or MIIM_TYPE Or MIIM_STATE Or MIIM_SUBMENU
  • Let .hSubMenu = lHandleSousMenu(0)
  • End With
  • Call InsertMenuItem(lHandleMenu, 0, True, pMenuInfo)
  • 'on définit le nouveau sous-sous-menu :
  • With pMenuInfo
  • Let .cbSize = Len(pMenuInfo)
  • Let .fType = MFT_STRING
  • Let .fState = MFS_ENABLED
  • Let .dwTypeData = "Sous-Sous-Menu1"
  • Let .cch = Len(pMenuInfo.dwTypeData)
  • Let .wID = 102
  • Let .fMask = MIIM_ID Or MIIM_TYPE Or MIIM_STATE
  • End With
  • Call InsertMenuItem(lHandleSousMenu(1), 0, True, pMenuInfo)
  • 'on définit le nouveau sous-sous-menu :
  • With pMenuInfo
  • Let .cbSize = Len(pMenuInfo)
  • Let .fType = MFT_STRING
  • Let .fState = MFS_ENABLED
  • Let .dwTypeData = "Sous-Sous-Menu2"
  • Let .cch = Len(pMenuInfo.dwTypeData)
  • Let .wID = 103
  • Let .fMask = MIIM_ID Or MIIM_TYPE Or MIIM_STATE
  • End With
  • Call InsertMenuItem(lHandleSousMenu(1), 1, True, pMenuInfo)
  • 'on insère un nouveau menu dans le menu courant :
  • With pMenuInfo
  • Let .cbSize = Len(pMenuInfo)
  • Let .fType = MFT_STRING
  • Let .fState = MFS_ENABLED
  • Let .dwTypeData = "Sous-Menu2"
  • Let .cch = Len(pMenuInfo.dwTypeData)
  • Let .wID = 1
  • Let .fMask = MIIM_ID Or MIIM_TYPE Or MIIM_STATE Or MIIM_SUBMENU
  • Let .hSubMenu = lHandleSousMenu(1)
  • End With
  • Call InsertMenuItem(lHandleMenu, 1, True, pMenuInfo)
  • 'on affiche le menu crée
  • Call GetCursorPos(pPositionCurseur)
  • Let AfficherMenu = TrackPopupMenuEx(lHandleMenu, TPM_LEFTALIGN Or TPM_RIGHTBUTTON Or TPM_RETURNCMD, pPositionCurseur.x, pPositionCurseur.y, Me.hwnd, ByVal 0&)
  • Call DestroyMenu(lHandleMenu)
  • Call DestroyMenu(lHandleSousMenu(0))
  • Call DestroyMenu(lHandleSousMenu(1))
  • Call DestroyMenu(lHandleSousSousMenu(0))
  • Call DestroyMenu(lHandleSousSousMenu(1))
  • 'la fonction a réussie
  • Exit Function
  • 'routine de traitement d'erreur
  • erreur0:
  • 'Problème : On n'a pas pu afficher le menu ou on ne connaît pas l'ID du menu sélectionné
  • 'Solution : On renvoie une valeur d'erreur : -1
  • Let AfficherMenu = -1
  • End Function
  • Private Sub Form_Click()
  • Select Case AfficherMenu
  • Case 100
  • MsgBox "Vous avez cliquez sur le sous-sous menu 1 du sous-menu 1"
  • Case 101
  • MsgBox "Vous avez cliquez sur le sous-sous menu 2 du sous-menu 1"
  • Case 102
  • MsgBox "Vous avez cliquez sur le sous-sous menu 1 du sous-menu 2"
  • Case 103
  • MsgBox "Vous avez cliquez sur le sous-sous menu 2 du sous-menu 2"
  • End Select
  • End Sub
'déclaration des constantes API privées à l'objet
Private Const MIIM_ID = &H2
Private Const MIIM_TYPE = &H10
Private Const MIIM_STATE = &H1
Private Const MIIM_SUBMENU = &H4
Private Const TPM_LEFTALIGN = &H0&
Private Const TPM_RETURNCMD = &H100&
Private Const TPM_RIGHTBUTTON = &H2&
Private Const MFT_RADIOCHECK = &H200&
Private Const MFT_CHECKED = &H8&
Private Const MFT_STRING = &H0
Private Const MFS_ENABLED = &H0

'déclaration des types privés à l'objet
Private Type MENUITEMINFO
    cbSize As Long
    fMask As Long
    fType As Long
    fState As Long
    wID As Long
    hSubMenu As Long
    hbmpChecked As Long
    hbmpUnchecked As Long
    dwItemData As Long
    dwTypeData As String
    cch As Long
End Type

Private Type POINTAPI
    x As Long
    y As Long
End Type

'déclaration des fonctions API privées à l'objet
Private Declare Function CreatePopupMenu Lib "user32" () As Long
Private Declare Function InsertMenuItem Lib "user32.dll" Alias "InsertMenuItemA" (ByVal hMenu As Long, ByVal uItem As Long, ByVal fByPosition As Long, lpmii As MENUITEMINFO) As Long
Private Declare Function TrackPopupMenuEx Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal hwnd As Long, ByVal lptpm As Any) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function DestroyMenu Lib "user32" (ByVal hMenu As Long) As Long

Public Function AfficherMenu() As Long

'======================================================
'Permet de créer le menu, puis de l'afficher
'
'Renvoie l'ID du menu cliqué
'Renvoie -1 en cas d'erreur
'======================================================

'on active la routine de traitement d'erreur
On Error GoTo erreur0

'déclaration des variables privées
Dim pMenuInfo As MENUITEMINFO 'définit les info de l'item de menu ajouté
Dim pPositionCurseur As POINTAPI 'stocke la position actuelle du curseur
Dim lHandleMenu As Long 'stocke le handle du menu
Dim lHandleSousMenu(1) As Long 'stocke les handles des sous-menus
Dim lHandleSousSousMenu(1) As Long 'stocke les handles des sous-sous-menus

    'on définit le handle du menu popup
    Let lHandleMenu = CreatePopupMenu
    Let lHandleSousMenu(0) = CreatePopupMenu
    Let lHandleSousMenu(1) = CreatePopupMenu
    Let lHandleSousSousMenu(0) = CreatePopupMenu
    Let lHandleSousSousMenu(1) = CreatePopupMenu
    
    'on définit le nouveau sous-sous-menu  :
    With pMenuInfo
        Let .cbSize = Len(pMenuInfo)
        Let .fType = MFT_STRING
        Let .fState = MFS_ENABLED
        Let .dwTypeData = "Sous-Sous-Menu1"
        Let .cch = Len(pMenuInfo.dwTypeData)
        Let .wID = 100
        Let .fMask = MIIM_ID Or MIIM_TYPE Or MIIM_STATE
    End With
    Call InsertMenuItem(lHandleSousMenu(0), 0, True, pMenuInfo)
          
    'on définit le nouveau sous-sous-menu  :
    With pMenuInfo
        Let .cbSize = Len(pMenuInfo)
        Let .fType = MFT_STRING
        Let .fState = MFS_ENABLED
        Let .dwTypeData = "Sous-Sous-Menu2"
        Let .cch = Len(pMenuInfo.dwTypeData)
        Let .wID = 101
        Let .fMask = MIIM_ID Or MIIM_TYPE Or MIIM_STATE
    End With
    Call InsertMenuItem(lHandleSousMenu(0), 1, True, pMenuInfo)
                            
    'on insère un nouveau menu dans le menu courant :
    With pMenuInfo
        Let .cbSize = Len(pMenuInfo)
        Let .fType = MFT_STRING
        Let .fState = MFS_ENABLED
        Let .dwTypeData = "Sous-Menu1"
        Let .cch = Len(pMenuInfo.dwTypeData)
        Let .wID = 0
        Let .fMask = MIIM_ID Or MIIM_TYPE Or MIIM_STATE Or MIIM_SUBMENU
        Let .hSubMenu = lHandleSousMenu(0)
    End With
    Call InsertMenuItem(lHandleMenu, 0, True, pMenuInfo)
      
    'on définit le nouveau sous-sous-menu  :
    With pMenuInfo
        Let .cbSize = Len(pMenuInfo)
        Let .fType = MFT_STRING
        Let .fState = MFS_ENABLED
        Let .dwTypeData = "Sous-Sous-Menu1"
        Let .cch = Len(pMenuInfo.dwTypeData)
        Let .wID = 102
        Let .fMask = MIIM_ID Or MIIM_TYPE Or MIIM_STATE
    End With
    Call InsertMenuItem(lHandleSousMenu(1), 0, True, pMenuInfo)
          
    'on définit le nouveau sous-sous-menu  :
    With pMenuInfo
        Let .cbSize = Len(pMenuInfo)
        Let .fType = MFT_STRING
        Let .fState = MFS_ENABLED
        Let .dwTypeData = "Sous-Sous-Menu2"
        Let .cch = Len(pMenuInfo.dwTypeData)
        Let .wID = 103
        Let .fMask = MIIM_ID Or MIIM_TYPE Or MIIM_STATE
    End With
    Call InsertMenuItem(lHandleSousMenu(1), 1, True, pMenuInfo)

    'on insère un nouveau menu dans le menu courant :
    With pMenuInfo
        Let .cbSize = Len(pMenuInfo)
        Let .fType = MFT_STRING
        Let .fState = MFS_ENABLED
        Let .dwTypeData = "Sous-Menu2"
        Let .cch = Len(pMenuInfo.dwTypeData)
        Let .wID = 1
        Let .fMask = MIIM_ID Or MIIM_TYPE Or MIIM_STATE Or MIIM_SUBMENU
        Let .hSubMenu = lHandleSousMenu(1)
    End With
    Call InsertMenuItem(lHandleMenu, 1, True, pMenuInfo)

    'on affiche le menu crée
    Call GetCursorPos(pPositionCurseur)
    Let AfficherMenu = TrackPopupMenuEx(lHandleMenu, TPM_LEFTALIGN Or TPM_RIGHTBUTTON Or TPM_RETURNCMD, pPositionCurseur.x, pPositionCurseur.y, Me.hwnd, ByVal 0&)
    Call DestroyMenu(lHandleMenu)
    Call DestroyMenu(lHandleSousMenu(0))
    Call DestroyMenu(lHandleSousMenu(1))
    Call DestroyMenu(lHandleSousSousMenu(0))
    Call DestroyMenu(lHandleSousSousMenu(1))
      
'la fonction a réussie
Exit Function

'routine de traitement d'erreur
erreur0:
'Problème : On n'a pas pu afficher le menu ou on ne connaît pas l'ID du menu sélectionné
'Solution : On renvoie une valeur d'erreur : -1

Let AfficherMenu = -1

End Function

Private Sub Form_Click()

    Select Case AfficherMenu
    
        Case 100
        
            MsgBox "Vous avez cliquez sur le sous-sous menu 1 du sous-menu 1"
        
        Case 101

            MsgBox "Vous avez cliquez sur le sous-sous menu 2 du sous-menu 1"

        Case 102
        
            MsgBox "Vous avez cliquez sur le sous-sous menu 1 du sous-menu 2"
        
        Case 103
    
            MsgBox "Vous avez cliquez sur le sous-sous menu 2 du sous-menu 2"
    
    End Select

End Sub


 Conclusion

Il s'agit d'une vieille source que j'avais développé et qui a été demandée par Progi1984. Je la poste donc pour lui répondre, ainsi que pour tout ceux à qui ca peut intéresser.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture DKSTOOLTIP : UN TOOL TIP PERSONNALISABLE AU LOOK XP, MULTILI...
Source avec Zip Source avec une capture ANTIALIASING DES CONTOURS D'UNE IMAGE
Source avec Zip Source avec une capture TRACER LES CONTOURS D'UNE IMAGE
Source avec Zip Source avec une capture BOUTON RÉDUIRE DANS SYSTRAY DANS LA BARRE DE TITRE AU LOOK X...
Source avec Zip Source avec une capture ZOOM AMÉLIORE AVEC ANTI-ALIASING

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) .NET DEPENDENCY VIEWER : ARBRE DES DÉPENDANCES D'UN ASSEMBLY... par ShareVB
Source avec Zip Source .NET (Dotnet) UTILITAIRE SKYDRIVE par MasterShadows
Source avec Zip ROTATION RAPIDE D'IMAGE par trex70
Source avec Zip Source avec une capture ENUMERATION DES PORTS TCP ET IDENTIFCATION DU PROCESS (PID) ... par Renfield
Source avec Zip Source avec une capture MOUSE SPEED AND WEIGHT : RETOUR DE FORCE VIRTUEL ! par ScSami

Commentaires et avis

Commentaire de thierrydelepine le 07/11/2004 22:36:22

code tres interressant pour l'utilisation des API de gestion des menus et aussi pour l'idée, car il y a peut j'ai eu besoin d'un menu vraiment dynamique je m'en suis sortie avec le menu VB a une entrée principal vide et des sous menus dynamique mais ce n'est pas propre.

ta solution est excellente je pense l'utiliser.
merci 10/10

Commentaire de psykocrash le 17/12/2004 16:24:41

Super, c'est exactement ce que je cherchais :)
Dommage que tu n'ai pas pensé à programmer une fonction pour automatiser la création de menus...
Au fait, tu pourais expliquer comment on définit la position du menu ?
Par exemple j'ai ce menu :

Fichier
.Nouveau
.Ouvrir
.Quitter
Configuration
.Police
.CouleurTexte
.CouleurFond
Aide
.About
.Informations
..Auteur
..Logiciel

Comment je fais pour le créer dynamiquement ? (sachant que la forme du menu peut être modifiée par l'utilisateur)

Merci :)

Commentaire de DARKSIDIOUS le 17/12/2004 16:50:20 administrateur CS

Et bien en fait, j'avais développé cette source pour un programme bien plus important, et je n'avais pas besoin de fonctions pour créer les menus : les menus étant statiques, mais contenant énormément de sous-menus dynamiques dont le contenus était connus à la compilation.

Pour définir la position dans le menu, il suffit de modifier le deuxième paramètre de la fonction InsertMenuItem :

Call InsertMenuItem(lHandleSousMenu(0), 0, True, pMenuInfo) 'positionne le menu à la position 0
Call InsertMenuItem(lHandleSousMenu(0), 1, True, pMenuInfo) 'positionne le menu à la position 1
' etc.

Par contre, pour ce que tu veux faire, il te faut utiliser une autre API : SetMenu pour définir les menus à rattacher à la feuille.

DarK Sidious

DarK Sidious

Commentaire de Flachy Joe le 08/02/2005 13:16:21

Salut, est-ce qu'il existe une maniere de lier le menu à une procedure, pour que celle ci s'execute lorsque tu clique sur le menu ? Tu utilise la fonction Form_Click, Ok, mais si on faisait un nouveau menu dans un formulaire qui n'appartient pas au prog (par exemple si je veux que mon prog ajoute un nouveau menu dans Word), comment le prog peut savoir que le menu a été cliqué ?

Commentaire de BruNews le 08/02/2005 13:29:13 administrateur CS

Si la fenêtre dont tu veux modifier les menus n'est pas dans ton processus, la chose est un peu plus complexe, exemple ici:
AJOUTER UN MENU A NOTEPAD (WIN32)
http://www.cppfrance.com/code.aspx?ID=28181

Commentaire de mailys6 le 24/03/2005 12:33:47

C'est absolument ce que je recherchais, à un détail près. Moi je n'ai pas besoin des "sous-sous menu". J'ai retiré les lignes de codes correspondant à la création des sous-sous menu, mais j'ai toujours les flèches au bout du menu. Je ne trouve pas ce que je dois modifier pour enlever ses flèches. Une idée ?
Merci d'avance
Maïlys

Commentaire de DARKSIDIOUS le 24/03/2005 12:40:03 administrateur CS

Salut,

Enlève le flag MIIM_SUBMENU dans les lignes :

Let .fMask = MIIM_ID Or MIIM_TYPE Or MIIM_STATE Or MIIM_SUBMENU

Cela devrait résoudre ton problème

DarK Sidious

Commentaire de mailys6 le 24/03/2005 12:43:51

Merci beaucoup de ta réponse rapide,
J'viens à l'instant de trouver ce qu'il fallait enlever. Il s'agissait en fait de :
        Let .hSubMenu = lHandleSousMenu(0)

Merci beaucoup en tout cas

Maïlys

Commentaire de salazar le 31/05/2005 10:25:46

Très intéressant !  Merci pour ton travail.
Il serait utile de mettre à jour ta source, avec les différentes améliorations proposées... ;o)         10/10

Bonne continuation.

Commentaire de starac le 23/12/2005 15:24:00

Excusez moi je debute ne programation et je voudrais faire la meme chose mais dans Excel.
C'est a dire créer des menus, auxquels j'affecte des macro.
J'arrive pas a créer des sous-sous-menus.
si quelqu'un pouvais m'aider...
merci

Commentaire de PaTaTe le 19/05/2006 16:10:36

Je cherchais une source similaire (sans vraiment chercher il est vrai ^^) mais je me pose une question directement liée à l'usage que je veux en faire :

Est-il possible d'adapter ce code à un menu qui contiendrais les dossiers et fichiers d'un disk dur ?

Je sais que cela peut paraitre lourd mais pour une application, il me faut un menu de ce type (le tout etant de gerer les clicks de ces menus et la bonjour le casse tete je pense).

Commentaire de DARKSIDIOUS le 19/05/2006 17:16:07 administrateur CS

Oui bien entendu que c'est possible : avec mon code, tu crée un menu avec le contenu que tu veux.

DarK Sidious

Commentaire de PaTaTe le 20/05/2006 04:40:11

J'ai un doute. L'entreprise me semble quand même harsadeuse et puis pour ce type de menu, une icône à chaque item est necessaire pour une meilleur lisibilité.

Commentaire de Danyz le 10/09/2006 21:42:03

Salut, super source ;)

C'est possible de créér avec ta source un sous menu pour un menu deja existant ?

dans cette exemple : http://img113.imageshack.us/img113/9421/capture001ig4.png ,
je voudrais ajouter le listing des pistes d'un dossier dans un sous menu (ici le sous menu "Pistes")

Merci , @ ++

Commentaire de DARKSIDIOUS le 10/09/2006 21:50:36 administrateur CS

Oui c'est possible, il suffit de récupèrer le handle du menu Pistes, et de lui rajouter des submenus.

DarK Sidious

Commentaire de Danyz le 11/09/2006 04:42:40

Merci de ta reponse ;)

Au risque de passer pour un boulet, tu peux m'en dire + stp ?
Pour recuperer le handle d'un controle c'est avec .hWnd normalement ? les menu n'ont pas cette propriété...
Si tu pouvais me dire à quel endroit changer ca dans ton code ca serait top ;)

Commentaire de violent_ken le 02/11/2006 17:44:10

Salut, très utile ce bout de code.
Merci, @+

Commentaire de AngeliusMefyrx le 12/12/2006 22:04:49

Salut,

Thanks pour le code,
Je l'ai pas encore essayer, je crée mon code en notepad et je corrigerai le reste un peu plus tard, je le teste de temps à autres chez nous, mais la j'intègre la section menu.

En passant est-ce qu'il y a un moyen d'insérer une barre entre les menus pour diférencier des sections
C'est à dire pour NotePad par exemple, il y a une barre entre dans "Édition" entre "Annuler" et "Couper"

Je me demandais aussi, quand on click sur le menu, quelle est l'options généré pour que j'y génère du code en retour...

Ce que je veux faire, c'est un menu généré directement à partir d'une base de donnée access.  La base de donnée contenant à la fois le titre et la commande a executer.

Merci

Commentaire de DARKSIDIOUS le 12/12/2006 22:11:35 administrateur CS

Oui, dans la structure MenuItemInfo, il faut spécifier le flag Public Const MFT_SEPARATOR = &H800

DarK Sidious

Commentaire de tdt63 le 09/02/2009 17:12:28

Bonjour, très utile ce code. Une petite question : quelqu'un sait-il comment faire l'équivalent pour les menus en en-tête de la fenêtre ? Je sais qu'il faut utiliser la fonction SetMenu, mais je ne sais pas comment récupérer les clics de l'utilisateur en suite.

Merci.

Commentaire de xgluk le 11/10/2010 14:39:41 10/10

excellent, je l'ai réutilisé pour mettre un menu contextuel sur la systray avec un contenu modifiable...

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales