Handle sous-menu erreur

Handle sous-menu erreur - C - Programmation

Marsh Posté le 29-02-2004 à 10:23:06    

J'ai un souci avec cette procédure, ça fonctionnait sous 98SE à priori, et maintenant que je suis sous XP ça ne fonctionne plus correctement dans le sens où j'ai une erreur 87 la première fois que je passe dedans, par la suite tout se passe bien.
L'erreur 87 indique "invalide paramètre" lorsque je cherche à récupérer le handle du sous-menu.

Code :
  1. /* ------------------------------------------------------------------------- */
  2. HMENU IPluginManager::GetPluginMenu( bool bContext)
  3. /* ------------------------------------------------------------------------- */
  4. {
  5. HMENU   hMenu = GetPlugMenu( bContext);
  6.     // Modify menu on the fly, memorisation of this handle for
  7.     // modification by the synchro procedure for standard menu.
  8.     DoModifyMenu( hMenu);
  9.    
  10.     if ( !bContext)
  11.         m_hMenuStd = hMenu;
  12.     return( hMenu);
  13. }
  14. /* ------------------------------------------------------------------------- */
  15. void IPluginManager::DoModifyMenu( HMENU hMenu)
  16. /* ------------------------------------------------------------------------- */
  17. {
  18.     static MENUITEMINFO  sMenuItemInfo;
  19. HMENU     hSubMenu = NULL;
  20.     DWORD     dwErr = 0;
  21.     if ( hMenu == NULL || m_nRankOrder == 0)
  22.         return;
  23.     sMenuItemInfo.cbSize = sizeof( MENUITEMINFO);
  24.     sMenuItemInfo.fMask  = MIIM_SUBMENU;
  25. // get sub-menu     
  26.     if (!GetMenuItemInfo( hMenu, 0, TRUE, &sMenuItemInfo))
  27.  dwErr = GetLastError();
  28.     hSubMenu = sMenuItemInfo.hSubMenu;
  29. // set ID and text according to rank order
  30.     sprintf( m_szRankMenu, "&Décodage On/Off\t%s%d",
  31.              m_szBaseVirtKey, m_nRankOrder);
  32.     sMenuItemInfo.dwTypeData = m_szRankMenu;
  33.     sMenuItemInfo.wID    = m_nID_PLUGIN_BASE + m_nRankOrder;
  34.    
  35.     if ( m_eOS == 95) {
  36.         sMenuItemInfo.fMask  = MIIM_TYPE | MIIM_ID; // | MIIM_STRING;
  37.         sMenuItemInfo.fType  = MFT_STRING;
  38.     } else {
  39.         sMenuItemInfo.fMask  = MIIM_ID | MIIM_STRING;
  40.     }
  41. SetMenuItemInfo( hSubMenu, 0, TRUE, &sMenuItemInfo);
  42.     // set status
  43.     SetStatusMenu( sMenuItemInfo.hSubMenu, sMenuItemInfo.wID,
  44.                    IsRunning() ? MFS_CHECKED : MFS_UNCHECKED);
  45. }


A priori le handle du menu principal est valide.
Si qqun a une idée ...
Merci.

Reply

Marsh Posté le 29-02-2004 à 10:23:06   

Reply

Marsh Posté le 29-02-2004 à 11:15:48    

Bon, j'ai trouvé ... le handle du menu n'est plus valide lorsque je l'utilise ...L'application au dessus l'ayant detruit ... ;-((

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed