COleControl::GetActivationPolicy
Altera o comportamento padrão de ativação de um controle que oferece suporte a interface de IPointerInactive .
virtual DWORD GetActivationPolicy( );
Valor de retorno
Uma combinação de sinalizadores da enumeração de POINTERINACTIVE .Os sinalizadores possíveis são:
POINTERINACTIVE_ACTIVATEONENTRY
O objeto deve ser ativado no lugar quando o mouse o incorpora durante uma operação de movimentação do mouse.POINTERINACTIVE_DEACTIVATEONLEAVE
O objeto deve ser desativado quando o mouse deixa o objeto durante uma operação de movimentação do mouse.POINTERINACTIVE_ACTIVATEONDRAG
O objeto deve ser ativado no lugar quando o mouse é arrastada sobre ele durante uma operação de arrastar e soltar.
Comentários
Quando a interface de IPointerInactive estiver ativada, o recipiente delegar-lhe-á WM_SETCURSOR e mensagens de WM_MOUSEMOVE .A implementação de COleControl de esta interface despachará essas mensagens através do mapa de mensagem do seu controle, após definir as coordenadas do mouse adequadamente.
Sempre que o recipiente recebe uma mensagem de WM_SETCURSOR ou de WM_MOUSEMOVE com o ponteiro do mouse sobre um objeto inativo que suporta IPointerInactive, deve chamar GetActivationPolicy nos sinalizadores da interface e de retorno da enumeração de POINTERINACTIVE .
Você pode processar as mensagens apenas como mensagens comuns da janela, adicionando entradas correspondentes no mapa de mensagem.Em seus manipuladores, evite usar a variável de membro de m_hWnd (ou algumas funções de membro que o usa) sem primeiro verificar que o valor éNULOnão-.
Qualquer objeto deve fazer mais que define o cursor do mouse e/ou aciona um evento de mudança do mouse, como fornece retornos visuais especiais, deve retornar o sinalizador de POINTERINACTIVE_ACTIVATEONENTRY e desenhar comentários apenas quando ativo.Se o objeto retorna este sinalizador, o contêiner deve toggle imediatamente no lugar e então ele frente a mesma mensagem que disparou a chamada a GetActivationPolicy.
Se POINTERINACTIVE_ACTIVATEONENTRY e sinalizadores de POINTERINACTIVE_DEACTIVATEONLEAVE é retornado, o objeto será ativado somente quando o mouse está sobre o objeto.Se apenas o sinalizador de POINTERINACTIVE_ACTIVATEONENTRY é retornado, o objeto será ativado apenas uma vez quando o mouse entra primeiro o objeto.
Você também pode querer um controle inativo para ser o destino de um arrastar e soltar OLE para a operação.Isso requer ativar o controle no momento em que o usuário arrasta um objeto sobre ele, de modo que a janela de controle pode ser registrada como um destino alvo.Para fazer com que a ativação ocorre durante um arrastar, retornar o sinalizador de POINTERINACTIVE_ACTIVATEONDRAG :
DWORD CMyAxCtrl::GetActivationPolicy()
{
return POINTERINACTIVE_ACTIVATEONDRAG;
}
Informações comunicada por GetActivationPolicy não deve ser armazenada em cache por um recipiente.Em vez de isso, esse método deve ser chamado sempre que o mouse entra com um objeto inativo.
Se um objeto inativo não solicitar para ser ativado no lugar quando o mouse o inserir, seu contêiner deve despachar mensagens subseqüentes de WM_SETCURSOR a esse objeto chamando OnInactiveSetCursor quando o ponteiro do mouse permanece sobre o objeto.
Ativar a interface de IPointerInactive normalmente significa que você deseja que o controle seja capaz de mensagens do mouse de processamento em cada vez.Para obter esse comportamento em um contêiner que não oferece suporte a interface de IPointerInactive , você precisará ter ativado quando o controle sempre visível, o que significa que o controle deve ter o sinalizador de OLEMISC_ACTIVATEWHENVISIBLE entre os sinalizadores diversos.Em o entanto, para impedir que este sinalizador tenham efeito em um contêiner que suporte IPointerInactive, você também pode especificar o sinalizador de OLEMISC_IGNOREACTIVATEWHENVISIBLE :
static const DWORD BASED_CODE _dwMyOleMisc =
OLEMISC_ACTIVATEWHENVISIBLE |
OLEMISC_IGNOREACTIVATEWHENVISIBLE |
OLEMISC_SETCLIENTSITEFIRST |
OLEMISC_INSIDEOUT |
OLEMISC_CANTLINKINSIDE |
OLEMISC_RECOMPOSEONRESIZE;
Requisitos
Cabeçalho: afxctl.h