2010-09-27 23 views
1

Je ne suis pas en train d'utiliser pCmdInfo->lpVerb mais mon problème est de savoir comment allons-nous gérer la situation lorsque nous créons dynamiquement les sous-menus rightclick. Par exemple, je le scénario suivant:Pouvons-nous exécuter rightclick sans utiliser pCmdInfo-> lpVerb

if(strcmp(cRegKeyVal,"Connected")==0) 
    { 
     //g_bConnectStatus=TRUE; 
     InsertMenu (m_hSubmenu , 0, MF_BYPOSITION|MF_GRAYED, m_uCmdID++, _T("Connect")); 
     InsertMenu (m_hSubmenu , 1, MF_BYPOSITION, m_uCmdID++, _T("DicConnect")); 
     InsertMenu (m_hSubmenu , 2, MF_BYPOSITION, m_uCmdID++, _T("Configure")); 
     InsertMenu (m_hSubmenu , 3, MF_BYPOSITION, m_uCmdID++, _T("Menu4")); 
     InsertMenu (m_hSubmenu , 4, MF_BYPOSITION, m_uCmdID++, _T("About")); 
    } 
    else 
    { 
     //g_bConnectStatus=FALSE; 
     InsertMenu (m_hSubmenu , 0, MF_BYPOSITION, m_uCmdID++, _T("Connect")); 
     InsertMenu (m_hSubmenu , 3, MF_BYPOSITION, m_uCmdID++, _T("Help")); 
     InsertMenu (m_hSubmenu , 4, MF_BYPOSITION, m_uCmdID++, _T("About")); 
    } 
.. 
.. 
InsertMenuItem (hmenu, uMenuIndex, TRUE, &mii); 
} 

maintenant Si j'utilise pCmdInfo->lpVerb avec boîtier de commutation, comme l'a démontré ci-dessous, puis Case 1 est CHAISE Que je clique sur DisConnect (Menu Article Inséré dans Si condition extrait de code ci-dessus) ou Help (Menu élément inséré dans Autres partie en tant que fragment de code ci-dessus)

switch (LOWORD(pCmdInfo->lpVerb)) 
     { 
     case 0: 
      { 
      //Your Logi for Case-0 
      } 
      break; 
     case 1: 
      { 
     //Your Logi for Case-I  
      } 
     break; 
     } 

Répondre

1

Vous êtes censé stocker les identifiants d'élément de menu (ou compensation?) Dans QueryContextMenu pour une utilisation ultérieure dans InvokeCommand:

QueryContextMenu() 
{ 
    m_uConnectId = m_uCmdID++; 
    InsertMenu(m_hSubMenu, "Connect"); 
    m_uHelpId = m_uCmdID++; 
    InsertMenu(m_hSubMen, "Help"); 
} 

InvokeCommand() 
{ 
    ULONG uCmdID = LOWORD(pCmdInfo->lpVerb); 
    if(uCmdID == m_uConnectId) 
    { 
     // do "Connect" 
    } 
    else if(uCmdID == m_uHelpId) 
    { 
     // do "Help" 
    } 
} 
+0

Essayé avec le Code. Lors de l'affectation de m_ConnectID = m_uCmdID ++, m_ConnectID contient une valeur proche de 3081 alors que pCmdInfo-> lpVerb = contient les valeurs (peut être des valeurs d'index) comme 0,1,3..So le Compare ne rapporte aucun match. En outre le InsertMenu ne prend pas 2 arguments. – Simsons

+0

C'était pseudo-code à des fins d'illustration. Je suppose que lpVerb contient l'index au lieu de l'identifiant, donc vous devez stocker les index au lieu des identifiants. – Luke

+0

Dans ce cas, l'index sera le même pour les 3 premiers éléments de sous-menu dans les conditions Si et Sinon. – Simsons