2010-09-27 2 views
1

Я не агент, использующий pCmdInfo->lpVerb, но моя проблема заключается в том, как мы будем обрабатывать ситуацию, когда мы создадим подменю rightclick динамически. Например, у меня есть следующий сценарий:Можем ли мы выполнить rightclick без использования 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); 
} 

Теперь если я использую pCmdInfo->lpVerb с переключателем случае, как показано ниже, то Case 1 становится выполняется ли я нажимаю на DisConnect (пункт меню Ввел в Если условие в фрагменте кода выше) или Help (Пункт меню Поставлен в Else части как выше фрагмент кода)

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

ответ

1

Вы должны хранить идентификаторы пунктов меню (или смещение?) В QueryContextMenu для последующего использования в 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

Пробовал с Кодексом. При назначении m_ConnectID = m_uCmdID ++ m_ConnectID содержит значение около 3081, в то время как pCmdInfo-> lpVerb = содержит значения (могут быть значения индекса), такие как 0,1,3. Сравнение Compare не дает совпадений. Также InsertMenu не принимает 2 аргумента. – Simsons

+0

Это был псевдокод для иллюстративных целей. Я полагаю, что lpVerb содержит индекс вместо идентификатора, поэтому вам нужно хранить индексы вместо идентификаторов. – Luke

+0

В этом случае Индекс будет таким же для 1-го 3 пункта подменю в If и Else Condition. – Simsons

Смежные вопросы