Intégration d'un menu créé par une librairie externe qui me renvoie un HMENU, da

jchoplin Messages postés 12 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 16 mars 2006 - 13 mars 2006 à 17:05
jchoplin Messages postés 12 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 16 mars 2006 - 14 mars 2006 à 13:40
Bonjour,

Mon programme en C# fait appel à une librairie pour
créer un menu à intégrer. Cette librairie me renvoie un HMENU (donc un
IntPtr en C#) mais je n'arrive pas à intégrer ce HMENU dans mon appli.
J'ai essayé un SetMenu(this.Handle, hMenu) tiré de user32.dll. J'arrive
à voir mon menu sous une forme complètement horrible, mais au moins je
sais qu'il existe. Maintenant j'aimerai l'intégrer pleinement à mon
programme sous la forme d'un menu dans ma barre d'outil qui est un
toolstripmenu (j'utilise .Net Framework 2.0, VS 2005).
Est-ce que quelqu'un sait comment convertir ou intégrer un tel menu dans une appli en c#?

merci d'avance

5 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
14 mars 2006 à 09:16
le problème c'est que les menus systemes et les toolstripmenus sont 2 choses complètement différentes.

la librairie que tu utilises est-elle en .net ?


Sébastien FERRAND (
blog)
[Microsoft MVP Visual C#]
0
jchoplin Messages postés 12 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 16 mars 2006
14 mars 2006 à 11:43
non malheureusement. c'est du C brut. J'arrive à parcourir en partie le menu pour récupérer les textes du menu (et encore, pas tous pour je ne sais quelle raison mystérieuse), mais de là à reconstruire le menu à la main c'est pas gagné... Je me doute bien que les 2 genres de menu sont différents, mais est-ce qu'il y a un moyen de reconstruire un menu pour une appli .net à partir d'un menu système? est-ce qu'il y a un moyen d'intégrer ce menu système directement dans l'appli .net?
0
jchoplin Messages postés 12 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 16 mars 2006
14 mars 2006 à 12:21
voilà, j'arrive à recréer l'arborescence de mon menu tel qu'il doit être, mais maintenant j'aimerais assigner les commandes d'origine aux clicks sur mes menus.

Voilà ma méthode pour recréer le menu, je l'initialise avec le hmenu racine et mon toolStripMenuItem racine. Maintenant il me reste à définir les actions des clicks, mais c'est là que je coince. Il n'y a aucun champ dens MenuItemInfo qui définit la valeur du message envoyé au système. Une idée?
Merci beaucoup

private void parcoursSubMenu(IntPtr Menu, ToolStripMenuItem parent)
{
int menuitemcount = GetMenuItemCount(Menu);
for (int j = 0; j < menuitemcount; j++)
{
MENUITEMINFO mif = new MENUITEMINFO();
mif.fMask = 0x10;
mif.fType = 0;
mif.dwTypeData = null;
mif.cbSize = (uint)Marshal.SizeOf(mif);
GetMenuItemInfo(Menu, (uint)j, true, ref mif);

mif.dwTypeData = new string(' ', (int)(mif.cch + 1));
mif.cch++;

GetMenuItemInfo(Menu, (uint)j, true, ref mif);

if (mif.fType == 0x800)
{
ToolStripSeparator tsp = new ToolStripSeparator();
parent.DropDownItems.Add(tsp);
}
else
{
ToolStripMenuItem tsmi = new ToolStripMenuItem();
tsmi.Text = mif.dwTypeData;
parent.DropDownItems.Add(tsmi);

IntPtr SubMenu = GetSubMenu(Menu, j);
if (SubMenu != IntPtr.Zero)
parcoursSubMenu(SubMenu, tsmi);
}

}
}
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
14 mars 2006 à 12:40
en fait, il faudrait que tu abonnes tous tes ToolStripMenuItem au même évènement. Pour chacun d'entre eux tu stockes dans la propriété Tag le handle du menu correspondant.

Ensuite, dans le handler de l'évènement, il ne reste plus qu'à appeler le menu correspondant...


Sébastien FERRAND (
blog)
[Microsoft MVP Visual C#]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jchoplin Messages postés 12 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 16 mars 2006
14 mars 2006 à 13:40
C'ext exactement l'idée que je venais d'avoir ce midi. Mais j'ai une question bête: comment on simule un click sur le menu correspondant justement? Il y a une fonction pour ça? genre click(menuHandle) `?

en tout cas merci beaucoup
0
Rejoignez-nous