Pergunta

Eu não sou agnaista usando pCmdInfo->lpVerb Mas meu problema é como lidaremos com a situação quando criarmos o clique da direita dinamicamente. Por exemplo, eu tenho o seguinte cenário:

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 );
}

Agora, se estou usando pCmdInfo->lpVerb Com o estojo, como demonstrado abaixo, então Case 1 está sendo executado se eu clico em DisConnect (Item de menu inserido em Se condição no snippet de código acima) ou Help (Item de menu inserido em Senão parte como snippet de código acima)

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

Solução

Você deve armazenar os identificadores de itens de menu (ou compensações?) No querycontextmenu para uso posteriormente no 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"
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top