Partilhar via


Manipulando notificações de personalização

Um controle comum da barra de ferramentas do Windows tem recursos internos de personalização, incluindo uma caixa de diálogo de personalização definida pelo sistema, que permite ao usuário inserir, excluir ou reorganizar botões da barra de ferramentas. O aplicativo determina se os recursos de personalização estão disponíveis e controla até que ponto o usuário pode personalizar a barra de ferramentas.

Você pode disponibilizar esses recursos de personalização para o usuário dando à barra de ferramentas o estilo CCS_ADJUSTABLE . Os recursos de personalização permitem que o usuário arraste um botão para uma nova posição ou remova um botão arrastando-o para fora da barra de ferramentas. Além disso, o usuário pode clicar duas vezes na barra de ferramentas para exibir a caixa de diálogo Personalizar barra de ferramentas , que permite ao usuário adicionar, excluir e reorganizar botões da barra de ferramentas. O aplicativo pode exibir a caixa de diálogo usando a função Personalizar membro.

O controle da barra de ferramentas envia mensagens de notificação para a janela pai em cada etapa do processo de personalização. Se o usuário mantiver a tecla SHIFT pressionada e começar a arrastar um botão, a barra de ferramentas manipulará automaticamente a operação de arrastar. A barra de ferramentas envia a mensagem de notificação TBN_QUERYDELETE para a janela pai para determinar se o botão pode ser excluído. A operação de arrastar termina se a janela pai retornar FALSE. Caso contrário, a barra de ferramentas captura a entrada do mouse e espera que o usuário solte o botão do mouse.

Quando o usuário libera o botão do mouse, o controle da barra de ferramentas determina o local do cursor do mouse. Se o cursor estiver fora da barra de ferramentas, o botão será excluído. Se o cursor estiver em outro botão da barra de ferramentas, a barra de ferramentas enviará a mensagem de notificação TBN_QUERYINSERT à janela pai para verificar se um botão pode ser inserido à esquerda do botão fornecido. O botão é inserido se a janela pai retornar TRUE; caso contrário, não é. A barra de ferramentas envia a TBN_TOOLBARCHANGE mensagem de notificação para sinalizar o fim da operação de arrastar.

Se o usuário iniciar uma operação de arrastar sem manter pressionada a tecla SHIFT, o controle da barra de ferramentas enviará a mensagem de notificação TBN_BEGINDRAG para a janela do proprietário. Um aplicativo que implementa seu próprio código de arrastar botões pode usar essa mensagem como um sinal para iniciar uma operação de arrastar. A barra de ferramentas envia a TBN_ENDDRAG mensagem de notificação para sinalizar o fim da operação de arrastar.

Um controle de barra de ferramentas envia mensagens de notificação quando o usuário personaliza uma barra de ferramentas usando a caixa de diálogo Personalizar barra de ferramentas . A barra de ferramentas envia a TBN_BEGINADJUST mensagem de notificação depois que o usuário clica duas vezes na barra de ferramentas, mas antes que a caixa de diálogo seja criada. Em seguida, a barra de ferramentas começa a enviar uma série de TBN_QUERYINSERT mensagens de notificação para determinar se a barra de ferramentas permite que os botões sejam inseridos. Quando a janela pai retorna TRUE, a barra de ferramentas deixa de enviar mensagens de notificação TBN_QUERYINSERT. Se a janela pai não retornar TRUE para nenhum botão, a barra de ferramentas destruirá a caixa de diálogo.

Em seguida, o controle da barra de ferramentas determina se algum botão pode ser excluído da barra de ferramentas enviando uma mensagem de notificação TBN_QUERYDELETE para cada botão na barra de ferramentas. A janela pai retorna TRUE para indicar que um botão pode ser eliminado; caso contrário, a janela retorna FALSE. A barra de ferramentas adiciona todos os botões da barra de ferramentas à caixa de diálogo, mas acinzenta aqueles que não podem ser excluídos.

Sempre que o controle da barra de ferramentas precisa de informações sobre um botão na caixa de diálogo Personalizar barra de ferramentas, ele envia a mensagem de notificação TBN_GETBUTTONINFO , especificando o índice do botão para o qual precisa de informações e o endereço de uma estrutura TBNOTIFIC . A janela pai deve preencher a estrutura com as informações relevantes.

A caixa de diálogo Personalizar barra de ferramentas inclui um botão de Ajuda e um botão de Repor. Quando o usuário escolhe o botão Ajuda, o controle da barra de ferramentas envia a mensagem de notificação TBN_CUSTHELP . A janela pai deve responder exibindo informações de ajuda. A caixa de diálogo envia a TBN_RESET mensagem de notificação quando o usuário seleciona o botão Redefinir. Esta mensagem indica que a barra de ferramentas está prestes a reinicializar a caixa de diálogo.

Essas mensagens são todas WM_NOTIFY mensagens e podem ser tratadas na janela do proprietário adicionando entradas do mapa de mensagens do seguinte formulário ao mapa de mensagens da janela do proprietário:

ON_NOTIFY( wNotifyCode, idControl, memberFxn )
  • wNotifyCode

    Código identificador da mensagem de notificação, como TBN_BEGINADJUST.

  • idControl

    O identificador do controle que envia a notificação.

  • membroFxn

    A função de membro a ser chamada quando esta notificação é recebida.

Sua função de membro seria declarada com o seguinte protótipo:

afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result );

Se o manipulador de mensagens de notificação retornar um valor, ele deve colocá-lo no LRESULT apontado pelo resultado.

Para cada mensagem, pNotifyStruct aponta para uma estrutura NMHDR ou uma estrutura TBNOTIFIC . Estas estruturas são descritas abaixo:

A estrutura NMHDR contém os seguintes membros:

typedef struct tagNMHDR {
    HWND hwndFrom;  // handle of control sending message
    UINT idFrom;// identifier of control sending message
    UINT code;  // notification code; see below
} NMHDR;
  • hwndDe

    Identificador de janela do controle que está enviando a notificação. Para converter esse identificador em um CWnd ponteiro, use CWnd::FromHandle.

  • idDe

    Identificador do controle que envia a notificação.

  • código

    Código de notificação. Esse membro pode ser um valor específico para um tipo de controle, como TBN_BEGINADJUST ou TTN_NEEDTEXT, ou pode ser um dos valores de notificação comuns listados abaixo:

    • NM_CLICK O usuário clicou no botão esquerdo do mouse dentro do controle.

    • NM_DBLCLK O usuário clicou duas vezes no botão esquerdo do mouse dentro do controle.

    • NM_KILLFOCUS O controle perdeu o foco de entrada.

    • NM_OUTOFMEMORY O controle não pôde concluir uma operação porque não há memória suficiente disponível.

    • NM_RCLICK O usuário clicou no botão direito do mouse dentro do controle.

    • NM_RDBLCLK O usuário clicou duas vezes no botão direito do mouse dentro do controle.

    • NM_RETURN O controle tem o foco de entrada e o usuário pressionou a tecla ENTER.

    • NM_SETFOCUS O controle recebeu o foco de entrada.

A estrutura TBNOTIFY contém os seguintes membros:

typedef struct {
    NMHDR hdr; // information common to all WM_NOTIFY messages
    int iItem; // index of button associated with notification
    TBBUTTON tbButton; // info about button associated withnotification
    int cchText;   // count of characters in button text
    LPSTR lpszText;// address of button text
} TBNOTIFY, FAR* LPTBNOTIFY;
  • HDR

    Informação comum a todas as mensagens WM_NOTIFY .

  • iItem

    Índice do botão associado à notificação.

  • tbBotão

    Estrutura TBBUTTON que contém informações sobre o botão da barra de ferramentas associado à notificação.

  • cchTexto

    Contagem de caracteres no texto do botão.

  • lpszText

    Ponteiro para o texto do botão.

As notificações que a barra de ferramentas envia são as seguintes:

  • TBN_BEGINADJUST

    Enviado quando o usuário começa a personalizar um controle de barra de ferramentas. O ponteiro aponta para uma estrutura NMHDR que contém informações sobre a notificação. O manipulador não precisa retornar nenhum valor específico.

  • TBN_BEGINDRAG

    Enviado quando o usuário começa a arrastar um botão em um controle de barra de ferramentas. O ponteiro aponta para uma estrutura TBNOTIFY . O membro iItem contém o índice baseado em zero do botão que está sendo arrastado. O manipulador não precisa retornar nenhum valor específico.

  • TBN_CUSTHELP

    Enviado quando o usuário escolhe o botão Ajuda na caixa de diálogo Personalizar Barra de Ferramentas. Sem valor de retorno. O ponteiro aponta para uma estrutura NMHDR que contém informações sobre a mensagem de notificação. O manipulador não precisa retornar nenhum valor específico.

  • TBN_ENDADJUST

    Enviado quando o usuário para de personalizar um controle de barra de ferramentas. O ponteiro aponta para uma estrutura NMHDR que contém informações sobre a mensagem de notificação. O manipulador não precisa retornar nenhum valor específico.

  • TBN_ENDDRAG

    Enviado quando o usuário para de arrastar um botão em um controle de barra de ferramentas. O ponteiro aponta para uma estrutura TBNOTIFY . O membro iItem contém o índice baseado em zero do botão que está sendo arrastado. O manipulador não precisa retornar nenhum valor específico.

  • TBN_GETBUTTONINFO

    Enviado quando o usuário está personalizando um controle de barra de ferramentas. A barra de ferramentas utiliza esta mensagem de notificação para obter as informações necessárias para a caixa de diálogo Personalizar Barra de Ferramentas. O ponteiro aponta para uma estrutura TBNOTIFY . O membro iItem especifica o índice baseado em zero de um botão. Os membros pszText e cchText especificam o endereço e o comprimento, em caracteres, do texto do botão atual. Um aplicativo deve preencher a estrutura com informações sobre o botão. Retorne TRUE se as informações do botão foram copiadas para a estrutura, ou FALSE caso contrário.

  • TBN_QUERYDELETE

    Enviado enquanto o usuário está personalizando uma barra de ferramentas para determinar se um botão pode ser excluído de um controle de barra de ferramentas. O ponteiro aponta para uma estrutura TBNOTIFY . O membro iItem contém o índice baseado em zero do botão a ser excluído. Retorne TRUE para permitir que o botão seja excluído ou FALSE para impedir que o botão seja excluído.

  • TBN_QUERYINSERT

    Enviado enquanto o usuário está personalizando um controle de barra de ferramentas para determinar se um botão pode ser inserido à esquerda do botão fornecido. O ponteiro aponta para uma estrutura TBNOTIFY . O membro iItem contém o índice baseado em zero do botão a ser inserido. Retorne TRUE para permitir que um botão seja inserido na frente do botão fornecido ou FALSE para impedir que o botão seja inserido.

  • TBN_RESET

    Enviado quando o usuário redefine o conteúdo da caixa de diálogo Personalizar Barra de Ferramentas. O ponteiro aponta para uma estrutura NMHDR que contém informações sobre a mensagem de notificação. O manipulador não precisa retornar nenhum valor específico.

  • TBN_TOOLBARCHANGE

    Enviado depois que o usuário personalizou um controle de barra de ferramentas. O ponteiro aponta para uma estrutura NMHDR que contém informações sobre a mensagem de notificação. O manipulador não precisa retornar nenhum valor específico.

Ver também

Usando CToolBarCtrl
Controlos