Manipuladores para mensagem-MAP intervalos

Este artigo explica como mapear um intervalo de mensagens para uma função de manipulador de mensagens única (em vez do mapeamento de uma mensagem para apenas uma função).

Há ocasiões em que você precisa processar mais de uma notificação de mensagem ou controle exatamente da mesma maneira.Em tais momentos, talvez você queira MAP todas as mensagens para uma função de manipulador único.mensagem-MAP intervalos permitem que você faça isso para um intervalo contíguo de mensagem s:

  • Você pode MAP intervalos de IDs de comando para:

    • Uma função de manipulador de comando.

    • Uma função de manipulador de atualização de comando.

  • Você pode MAP mensagens de notificação de controle para um intervalo de IDs de controle para uma função de manipulador de mensagens.

Os tópicos abordados neste artigo incluem:

  • Gravar a entrada de MAP da mensagem

  • Declarar a função de manipulador

  • Exemplo de um intervalo de IDs de comando

  • Exemplo de um intervalo de IDs de controle

Gravar a entrada do MAP de mensagens

No arquivo .CPP, adicione a entrada de MAP da mensagem sistema autônomo mostrado no exemplo a seguir:

ON_COMMAND_RANGE(ID_MYCMD_ONE, ID_MYCMD_TEN, &OnDoSomething)

A entrada de MAP da mensagem consiste nos seguintes itens:

  • A macro de intervalo do MAP da mensagem:

  • Parâmetros para a macro:

    As duas primeiras macros usam três parâmetros:

    • A ID de comando que inicia o intervalo

    • A ID de comando que finaliza o intervalo

    • O nome da função de manipulador de mensagens

    O intervalo de IDs de comando deve ser contíguo.

    A terceira macro, ON_CONTROL_RANGE, tem um parâmetro adicional primeiro: uma mensagem de notificação de controle, sistema autônomo EN_CHANGE.

Declarar a função de manipulador

Adicione sua declaração de função de manipulador no arquivo .h.O código a seguir mostra sistema autônomo isso deverá ficar, sistema autônomo mostrado abaixo:

public:
   afx_msg void OnDoSomething(UINT nID);

Manipulador de funções para comandos único normalmente utilizam sem parâmetros.Com exceção da atualização de manipulador de funções, funções de manipulador para intervalos de MAP da mensagem requerem um parâmetro extra, nID, do tipo UINT.Este parâmetro é o primeiro parâmetro.O parâmetro extra acomoda a ID de comando extras necessária para especificar que o usuário optou por comando.

Para obter mais informações sobre os requisitos de parâmetro para funções do manipulador de atualização, consulte Exemplo de um intervalo do comando identificações.

Exemplo de um intervalo do comando identificações

Quando você pode usar intervalos?Um exemplo é na manipulação de comandos como o comando aplicar aplicar zoom no MFC amostra HIERSVR.Este comando Zoom do modo de exibição, dimensioná-lo entre 25 % e 300 % de seu dimensionar normal.Modo de exibição de classe do HIERSVR usa um intervalo para lidar com os comandos de aplicar aplicar zoom em uma entrada do MAP da mensagem semelhante a esta:

ON_COMMAND_RANGE(ID_VIEW_ZOOM25, ID_VIEW_ZOOM300, &OnZoom)

Quando você gravar a entrada de MAP da mensagem, especifique:

  • Duas IDs de comando, iniciais e finais um intervalo contíguo.

    Aqui são ID_VIEW_ZOOM25 e ID_VIEW_ZOOM300.

  • O nome da função de manipulador para os comandos.

    Aqui é OnZoom.

A declaração da função seria semelhante a isso:

public:
   afx_msg void OnZoom(UINT nID);

No caso de atualização de funções do manipulador é semelhante e provavelmente será mais útil.É bastante comum para gravar ON_UPDATE_COMMAND_UI manipuladores para um número de comandos e encontrar-se escrever ou copiando, o mesmo código repetidamente. A solução é mapear um intervalo de IDs de comando para a função do manipulador de uma atualização usando o ON_UPDATE_COMMAND_UI_RANGE macro. As IDs de comando devem formar um intervalo contíguo.Para obter um exemplo, consulte o OnUpdateZoom manipulador de e seusON_UPDATE_COMMAND_UI_RANGE entrada de MAP da mensagem na classe de modo de exibição dos exemplos HIERSVR.

Funções de manipulador de atualização para comandos único normalmente utilizam um único parâmetro, pCmdUI, do tipo CCmdUI *.Ao contrário do manipulador de funções, funções de manipulador de atualização para intervalos de MAP da mensagem não requerem um parâmetro extra, nID, do tipo UINT.A ID de comando, que é necessário especificar que o usuário optou por comando, encontra-se na CCmdUI objeto.

Exemplo de um intervalo de controle identificações

Outro caso interessante é mapear mensagens de notificação de controle para um intervalo de IDs de controle para um único manipulador.Suponha que o usuário pode clicar em qualquer um dos botões de 10.Para mapear todos os botões de 10 para um manipulador, sua entrada de MAP da mensagem teria esta aparência:

ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON1, IDC_BUTTON10, OnButtonClicked)  

Quando você gravar o ON_CONTROL_RANGE macro em MAP da mensagem, especifique:

  • Uma mensagem de notificação de controle específico.

    Aqui é BN_CLICKED.

  • Os valores de ID de controle associados com o intervalo contíguo de controles.

    Aqui são IDC_BUTTON1 e IDC_BUTTON10.

  • O nome da função de manipulador de mensagens.

    Aqui é OnButtonClicked.

Quando você escrever a função de manipulador, especificar o extra UINT parâmetro, conforme mostrado a seguir:

void CRangesView::OnButtonClicked( UINT nID )
{
    int nButton = nID - IDC_BUTTON1;
    ASSERT( nButton >= 0 && nButton < 10 );
    // ...
}

The OnButtonClicked manipulador para um único BN_CLICKED mensagem não toma nenhum parâmetro.O mesmo manipulador para um intervalo de botões leva um UINT.O parâmetro extra permite para identificar o controle específico responsável por gerar o BN_CLICKED mensagem.

O código mostrado no exemplo é típico: convertendo o valor passado para um int dentro do intervalo de mensagem e declaram que esse é o caso. Em seguida, você pode dar algumas ações diferentes dependendo de qual botão foi clicado.

Consulte também

Conceitos

Declarando manipulador de mensagens funções