هل يمكننا تنفيذ clicklick دون استخدام pcmdinfo-> lpverb
-
25-09-2019 - |
سؤال
أنا لا أستخدم Agnaist 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
(عنصر القائمة مدرج في آخر جزء كما هو أعلاه قصاصة الكود)
switch ( LOWORD( pCmdInfo->lpVerb) )
{
case 0:
{
//Your Logi for Case-0
}
break;
case 1:
{
//Your Logi for Case-I
}
break;
}
المحلول
من المفترض أن تقوم بتخزين معرفات عنصر القائمة (أو الإزاحة؟) في 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"
}
}
لا تنتمي إلى StackOverflow