Fornece interação do mouse quando inativo
Se seu controle não é ativado imediatamente, você ainda pode deseja que ele processo WM_SETCURSOR e WM_MOUSEMOVE mensagens, mesmo que o controle não tem nenhuma janela própria. Isso pode ser realizado pela habilitação COleControlda implementação das IPointerInactive interface está desabilitado por padrão. (Consulte o SDK do ActiveX para obter uma descrição desta interface.) Para habilitá-la, inclua o pointerInactive sinalizar 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 sinalizar é gerado automaticamente se você selecionar o Notificações de ponteiro do mouse quando inativo opção a Configurações de controle página durante a criação de seu controle com o Assistente de controle ActiveX MFC.
Quando o IPointerInactive a interface está habilitada, os delegados de contêiner WM_SETCURSOR e WM_MOUSEMOVE mensagens para ele. COleControlda implementação do IPointerInactive envia as mensagens pelo MAP da mensagem do controle após ajustar as coordenadas do mouse apropriadamente. Você pode processar as mensagens como mensagens de janela comuns adicionando as entradas correspondentes ao MAP da mensagem.Nos seus manipuladores para essas mensagens, evite usar o m_hWnd variável de membro (ou qualquer função de membro que o utiliza) sem primeiro verificar que seu valor não é NULO.
Talvez também seja necessário um controle ActiveX inativo para ser o destino de uma operação de do tipo arrastar e soltar OLE.Para isso, é necessário ativar o controle no momento que o usuário arrasta um objeto sobre ele, para que a janela do controle pode ser registrada sistema autônomo um destino de soltar.Para fazer com que a ativação ocorrer durante uma arrastar, substituir COleControl::GetActivationPolicye retornar o POINTERINACTIVE_ACTIVATEONDRAG sinalizar:
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 todas as ocasiões. Para obter esse comportamento em um contêiner que não ofereça suporte a IPointerInactive interface, você precisa ter o controle sempre ativado quando visível, que significa que o controle deve incluir o OLEMISC_ACTIVATEWHENVISIBLE sinalizar entre seus diversos sinalizadores.No entanto, para evitar que esse sinalizar tendo efeito em um contêiner que oferece suporte a IPointerInactive, você também pode especificar o OLEMISC_IGNOREACTIVATEWHENVISIBLE sinalizar:
static const DWORD BASED_CODE _dwMyOleMisc =
OLEMISC_ACTIVATEWHENVISIBLE |
OLEMISC_IGNOREACTIVATEWHENVISIBLE |
OLEMISC_SETCLIENTSITEFIRST |
OLEMISC_INSIDEOUT |
OLEMISC_CANTLINKINSIDE |
OLEMISC_RECOMPOSEONRESIZE;