IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Concat�ner deux menus


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair� Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par d�faut Concat�ner deux menus
    Bonjour,

    Lors d'un d�veloppement, je devait concat�ner deux CMenu.

    J'ai r�alis� un bout de code pour y arriver.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    void GE_AppendMenu ( CMenu * pMenu, CMenu * pNewMenu )
    {
    	ASSERT ( pMenu && pNewMenu );
    	if ( pMenu == NULL || pNewMenu == NULL )
    		return;
     
     
    	UINT uPos = pMenu->GetMenuItemCount ( );
    	CMenu subMenu;
    	char sText [ 128 ];
     
    	MENUITEMINFO info = {0};
    	info.cbSize = sizeof (MENUITEMINFO); // must fill up this field
    	info.fMask = MIIM_STATE | MIIM_STRING | MIIM_ID | MIIM_SUBMENU;
    	info.dwTypeData = sText;
    	info.cch = sizeof ( sText );
    	for ( UINT i = 0; i < pNewMenu->GetMenuItemCount ( ); i++ )
    	{
    		memset ( sText, '\0', sizeof ( sText ) );
     
    		if ( pNewMenu->GetMenuItemInfo ( i, &info, TRUE ) == FALSE )
    		{
    			DWORD dwError = GetLastError ( );
    			ASSERT ( FALSE );
    			continue;
    		}
     
    		if ( info.hSubMenu != NULL )
    		{
    			ASSERT ( FALSE );
    		}
     
    		InsertMenuItem ( pMenu->m_hMenu, uPos++, TRUE, &info );
    	}
    }
    Ca marche relativement mais j'ai quelques soucis. D'une je n'ai pas encore g�r� les sous menus et leurs r�cursivit�s.
    Le second soucis, c'est au niveau du texte. Le premier �l�ment du menu fraichement ajout� est correct mais pour les autres �l�ments du menu le texte est tronqu� au bout de 15 caract�res.

    Quelqu'un aurait une id�e voir une solution � mon probl�me ?

    Merci d'avance

  2. #2
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    salut,
    bon je ne vois pas pourquoi tu ne recuperes que 15 caract�res .
    essaye avec la fonction GetMenuString.
    pour le parcours de l'arbre des menus tu peux faire une fonction recursive en utilisant GetSubMenu pour obtenir le pointeur sur le sous menu .

  3. #3
    Membre �clair� Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par d�faut
    A y est je viens de trouver.

    En fait au d�but de mon code j'avais initialis� ma structure MENUITEMINFO pour qu'elle soit correcte. Logique.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    	MENUITEMINFO info = {0};
    	info.cbSize = sizeof (MENUITEMINFO); // must fill up this field
    	info.fMask = MIIM_STATE | MIIM_STRING | MIIM_ID | MIIM_SUBMENU;
    	info.dwTypeData = sText;
    	info.cch = sizeof ( sText );
    Par contre j'ai constat� qu'apr�s avoir utilis� la fonction GetMenuItemInfo, la variable info.cch �tait pass� de 128 � 16. D'o� mes 15 caract�res.

    Il faut donc ABSOLUMENT r�-initialiser info.cch avant d'utiliser la fonction GetMenuItemInfo.

    Bon j'en ai profit� �galement pour remettre � z�ro info.dwTypeData.

    Voil� le nouveau code avec les deux lignes en plus
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    void GE_AppendMenu ( CMenu * pMenu, CMenu * pNewMenu )
    {
    	ASSERT ( pMenu && pNewMenu );
    	if ( pMenu == NULL || pNewMenu == NULL )
    		return;
     
     
    	UINT uPos = pMenu->GetMenuItemCount ( );
    	CMenu subMenu;
    	char sText [ 128 ];
     
    	MENUITEMINFO info = {0};
    	info.cbSize = sizeof (MENUITEMINFO); // must fill up this field
    	info.fMask = MIIM_STATE | MIIM_STRING | MIIM_ID | MIIM_SUBMENU;
    	info.dwTypeData = sText;
    	info.cch = sizeof ( sText );
    	for ( UINT i = 0; i < pNewMenu->GetMenuItemCount ( ); i++ )
    	{
    			// Initialisation de la structure
    		memset ( sText, '\0', sizeof ( sText ) );
    		info.cch = sizeof ( sText );
     
    		if ( pNewMenu->GetMenuItemInfo ( i, &info, TRUE ) == FALSE )
    		{
    			DWORD dwError = GetLastError ( );
    			ASSERT ( FALSE );
    			continue;
    		}
     
    		if ( info.hSubMenu != NULL )
    		{
    			ASSERT ( FALSE );
    		}
     
    		InsertMenuItem ( pMenu->m_hMenu, uPos++, TRUE, &info );
    	}
    }
    Par contre, je n'ai pas encore boss� sur le r�cursivit� du code. A suivre donc.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Concat�ner deux listes
    Par Dunk dans le forum Pascal
    R�ponses: 15
    Dernier message: 04/06/2025, 13h39
  2. [MenuItems] Merger deux menus � la main
    Par Manopower dans le forum Delphi
    R�ponses: 3
    Dernier message: 13/12/2006, 13h43
  3. Concat�ner deux fichiers binaires
    Par mickael.be dans le forum Delphi
    R�ponses: 7
    Dernier message: 30/07/2006, 13h11
  4. R�ponses: 6
    Dernier message: 27/05/2004, 10h41
  5. Concat�ner deux variables ?
    Par glsn dans le forum ASP
    R�ponses: 2
    Dernier message: 19/12/2003, 13h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo