Я не агент, использующий 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;
}
Пробовал с Кодексом. При назначении m_ConnectID = m_uCmdID ++ m_ConnectID содержит значение около 3081, в то время как pCmdInfo-> lpVerb = содержит значения (могут быть значения индекса), такие как 0,1,3. Сравнение Compare не дает совпадений. Также InsertMenu не принимает 2 аргумента. – Simsons
Это был псевдокод для иллюстративных целей. Я полагаю, что lpVerb содержит индекс вместо идентификатора, поэтому вам нужно хранить индексы вместо идентификаторов. – Luke
В этом случае Индекс будет таким же для 1-го 3 пункта подменю в If и Else Condition. – Simsons