Compartilhar via


Manipuladores para intervalos de mapa da mensagem

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

Há vezes quando você precisar processar mais de uma notificação de mensagem ou o controle da mesma maneira.Em tais momentos, talvez você queira mapear todas as mensagens para uma função de manipulador simples.Intervalos de mapa de mensagens permitem que você faça isso para um intervalo contíguo de mensagens:

  • Você pode mapear os intervalos de identificações de comando para:

    • Uma função de manipulador de comando.

    • Uma função de manipulador do comando update.

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

Os tópicos abordados neste artigo incluem:

  • Gravar a entrada de mapa de mensagens

  • 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 de mapa de mensagens

Na.CPP arquivo, adicione a entrada de mapa da mensagem, como mostrado no exemplo a seguir:

ON_COMMAND_RANGE(ID_MYCMD_ONE, ID_MYCMD_TEN, &OnDoSomething)

A entrada de mapa de mensagens consiste dos seguintes itens:

  • A macro de intervalo do mapa da mensagem:

  • Parâmetros para a macro:

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

    • A identificação de comando que inicia o intervalo

    • A identificação de comando que finaliza o intervalo

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

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

    A terceira macro ON_CONTROL_RANGE, leva um parâmetro adicional de primeiro: mensagem de uma notificação de controle, como EN_CHANGE.

Declarar a função de manipulador

Adicionar a declaração de função de manipulador na.Arquivo de H.O código a seguir mostra como isso pode parecer, como mostrado abaixo:

public:
   afx_msg void OnDoSomething(UINT nID);

Funções do manipulador de comandos simples normalmente levam sem parâmetros.Com exceção das funções de manipulador de atualização, funções de manipulador para intervalos de mapa de mensagens exigem um parâmetro extra, nID, do tipo UINT.Este parâmetro é o primeiro parâmetro.O parâmetro extra acomoda a identificação de comando extra necessária para especificar qual comando o usuário optou por.

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

Exemplo de IDs de comando de intervalo

Quando você pode usar intervalos?Um exemplo é no tratamento de comandos como o comando Zoom no exemplo MFC HIERSVR.Este comando reduz o modo de exibição, dimensioná-lo entre 25% e 300% do seu tamanho normal.Classe de modo de exibição do HIERSVR usa um intervalo para lidar com os comandos de Zoom com uma entrada de mapa de mensagem semelhante a esta:

ON_COMMAND_RANGE(ID_VIEW_ZOOM25, ID_VIEW_ZOOM300, &OnZoom)

Ao gravar a entrada de mapa da mensagem, especifique:

  • Duas IDs de comando, inicial e final de um intervalo contíguo.

    Here they are ID_VIEW_ZOOM25 and ID_VIEW_ZOOM300.

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

    Here it's OnZoom.

A declaração da função é semelhante a esta:

public:
   afx_msg void OnZoom(UINT nID);

O caso das funções de manipulador de atualização é semelhante e sejam mais úteis.É bastante comum para escrever ON_UPDATE_COMMAND_UI manipuladores para um número de comandos e perceber que está escrevendo ou copiando, o mesmo código repetidamente.A solução é mapear um intervalo de IDs para uma atualização usando de função de manipulador de comando do ON_UPDATE_COMMAND_UI_RANGE macro.As IDs de comando devem formar um intervalo contíguo.Por exemplo, consulte o OnUpdateZoom manipulador e sua ON_UPDATE_COMMAND_UI_RANGE entrada do mapa da mensagem na classe de modo de exibição de exemplo HIERSVR.

Atualizar funções do manipulador de comandos simples normalmente têm um único parâmetro, pCmdUI, do tipo CCmdUI *.Ao contrário das funções de manipulador funções de manipulador de atualização para intervalos de mapa da mensagem não requerem um parâmetro extra, nID, do tipo UINT.A identificação de comando, é necessário especificar qual comando o usuário tiver escolhido, é encontrada na CCmdUI objeto.

Exemplo de um controle de intervalo de IDs

Outro caso interessante é mapear mensagens de notificação de controle para um intervalo de IDs de controle a 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, a entrada de mapa da mensagem teria esta aparência:

ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON1, IDC_BUTTON10, OnButtonClicked)    

Quando você escreve o ON_CONTROL_RANGE macro em seu mapa da mensagem, especifique:

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

    Aqui tem BN_CLICKED.

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

    Here these are IDC_BUTTON1 and IDC_BUTTON10.

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

    Here it's OnButtonClicked.

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

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

O OnButtonClicked manipulador para um único BN_CLICKED mensagem sem parâmetros.O mesmo manipulador para um intervalo de botões tem um UINT.O parâmetro extra permite identificar determinado controle 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 declarar que esse é o caso.Em seguida, você pode levar alguma ação diferente dependendo de qual botão foi clicado.

Consulte também

Conceitos

Declaração de funções do manipulador de mensagem