Compartilhar via


Fornecendo Mouse interação enquanto inativo

Se o controle não é ativado imediatamente, talvez ainda queira processar WM_SETCURSOR e WM_MOUSEMOVE mensagens, mesmo que o controle não tem nenhuma janela própria.Isso pode ser feito habilitando COleControlda implementação do IPointerInactive interface é desabilitado por padrão.(Consulte o ActiveX SDK para obter uma descrição desta interface.) Para habilitá-la, inclua o pointerInactive sinalizador no conjunto de sinalizadores retornado por COleControl::GetControlFlags:

DWORD CMyAxOptCtrl::GetControlFlags()
{
   DWORD dwFlags = COleControl::GetControlFlags();


...


// The control can receive mouse notifications when inactive.
dwFlags |= pointerInactive;


...


   return dwFlags;
}

O código para incluir esse sinalizador é gerado automaticamente se você selecionar o Mouse ponteiro notificações quando inativo opção no Configurações de controle página quando criar o controle com o MFC Assistente de controle de ActiveX.

Quando o IPointerInactive interface é ativada, os representantes do contêiner WM_SETCURSOR e WM_MOUSEMOVE mensagens para ele.COleControlda implementação de IPointerInactive envia mensagens através do mapa da mensagem do controle depois de ajustar o mouse coordenadas adequadamente.Você pode processar as mensagens como mensagens de janela normal, adicionando as entradas correspondentes ao mapa da mensagem.Seus manipuladores para essas mensagens, evite usar o m_hWnd variável de membro (ou qualquer função de membro usa) sem verificar primeiro que seu valor não é Nulo.

Você também poderá um controle inativo para ser o destino de uma operação de arrastar e soltar OLE.Isso requer a ativação do controle no momento em que o usuário arrasta um objeto, para que a janela do controle pode ser registrada como um destino de soltar.Para fazer com que a ativação ocorrer durante uma operação arrastar, substituir COleControl::GetActivationPolicye retornar o POINTERINACTIVE_ACTIVATEONDRAG sinalizador:

DWORD CMyAxOptCtrl::GetActivationPolicy()
{
   return POINTERINACTIVE_ACTIVATEONDRAG;
}

Ativando o IPointerInactive interface normalmente significa que você deseja que o controle seja capaz de processar mensagens do mouse em todos os momentos.Para obter esse comportamento em um recipiente que não oferece suporte a IPointerInactive interface, você precisará ter o controle sempre ativado quando visível, que significa que o controle deve incluir o OLEMISC_ACTIVATEWHENVISIBLE sinalizador entre seus diversos sinalizadores.No entanto, para evitar que esse sinalizador de efeito em um recipiente que suporte IPointerInactive, você também pode especificar o OLEMISC_IGNOREACTIVATEWHENVISIBLE sinalizador:

static const DWORD BASED_CODE _dwMyOleMisc =
   OLEMISC_ACTIVATEWHENVISIBLE |
   OLEMISC_IGNOREACTIVATEWHENVISIBLE |
   OLEMISC_SETCLIENTSITEFIRST |
   OLEMISC_INSIDEOUT |
   OLEMISC_CANTLINKINSIDE |
   OLEMISC_RECOMPOSEONRESIZE;

Consulte também

Conceitos

Controles de ActiveX MFC: otimização