سؤال

أنا لا أستخدم 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"
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top