Um Controlarar comum de barra de ferramentas Windows possui recursos de personalização internos, incluindo uma caixa de diálogo personalização definidas pelo sistema, que permitem 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 a extensão à qual o usuário pode personalizar a barra de ferramentas.
Você pode disponibilizar esses recursos de personalização para o usuário, dando a barra de ferramentas estilo CCS_ADJUSTABLE . Os recursos de personalização permitem que o usuário para arrastar um botão para uma nova posição ou para remover um botão arrastando-a da barra de ferramentas. Além disso, o usuário pode duplo clique a 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 de membro Personalizar.
O Controlarar de barra de ferramentas envia mensagens de notificação para o janela pai em cada etapa do processo de personalização. Se o usuário mantiver a tecla SHIFT pressionada e começa a arrastar um botão, a barra de ferramentas automaticamente manipula a operação de arrastar. A barra de ferramentas envia a mensagem de notificação de 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 retorna FALSE. Caso contrário, a barra de ferramentas de captura de entrada do mouse e aguarda o usuário liberar o botão do mouse.
Quando o usuário libera o botão do mouse, o Controlarar de toolbar determina o local do cursor do mouse. Se o cursor está fora da barra de ferramentas, o botão é eliminado. Se o cursor estiver em outro botão de barra de ferramentas, a barra de ferramentas envia a mensagem de notificação de TBN_QUERYINSERT para a janela pai para determinar se um botão pode ser inserido à esquerda do botão determinado. O botão é inserido se a janela pai retorna verdadeiro; caso contrário, não é. A barra de ferramentas envia a mensagem de notificação do TBN_TOOLBARCHANGE para sinalizar o final da operação arrastar.
Se o usuário começa uma operação de arrastar sem mantendo pressionada a tecla SHIFT, o Controlarar de barra de ferramentas envia a mensagem de notificação TBN_BEGINDRAG para a janela do proprietário. Um aplicativo que implementa seu próprio código arrastando botão pode usar esta mensagem como um sinal para iniciar uma operação de arrastar. A barra de ferramentas envia a mensagem de notificação do TBN_ENDDRAG para sinalizar o final da operação arrastar.
Um Controlarar 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 mensagem de notificação TBN_BEGINADJUST após o usuário clica duas vezes na barra de ferramentas, mas antes da caixa de diálogo caixa é criada. Em seguida, a barra de ferramentas começa enviando uma série de mensagens de notificação de TBN_QUERYINSERT para determinar se a barra de ferramentas permite botões a ser inserido. Quando a janela pai retorna TRUE, a barra de ferramentas pára de enviar mensagens de notificação de TBN_QUERYINSERT . Se a janela pai retornar verdadeiro para qualquer botão, a barra de ferramentas destrói a caixa de diálogo.
Em seguida, o Controlarar de toolbar determina se qualquer um dos botões pode ser excluído da barra de ferramentas, enviando uma mensagem de notificação de TBN_QUERYDELETE para cada botão na barra de ferramentas. A janela pai retorna verdadeiro para indicar que um botão pode ser excluído; caso contrário, retorna FALSE. A barra de ferramentas adiciona Tudo botões da barra de ferramentas da caixa de diálogo, mas grays aqueles que não podem ser excluídos.
Sempre que o Controlarar de toolbar necessita 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 ele precisa de informações e o endereço de uma estrutura TBNOTIFY . O janela pai deve preencher a estrutura com as informações relevantes.
A caixa de diálogo Personalizar barra de ferramentas inclui um botão Ajuda e um botão de Reset. Quando o usuário escolhe o botão Ajuda, o Controlarar de barra de ferramentas envia a mensagem de notificação TBN_CUSTHELP . O janela pai deve responder, exibindo informações de ajuda. A caixa de diálogo envia a mensagem de notificação TBN_RESET quando o usuário seleciona o botão Reset. Esta mensagem indica que a barra de ferramentas está prestes a reinicializar a caixa de diálogo.
Elas são todas as mensagens WM_NOTIFY , e eles podem ser manipulados em sua janela do proprietário, adicionando entradas de mapa de mensagem da seguinte forma para Mapa da mensagem do sua janela do proprietário:
ON_NOTIFY ( wNotifyCode, idControl, memberFxn void )
wNotifyCode
Código de identificação de mensagem de notificação, como TBN_BEGINADJUST.
idControl
O identificador do Controlarar enviar a notificação.
memberFxn
A função de membro para ser chamado quando esta notificação é recebida.
Função de membro poderia ser declarada com o seguinte protótipo:
afx_msg privatevoid memberFxn( NMHDR * pNotifyStruct, LRESULT * resultado );
Se o manipulador de mensagem de notificação retorna um valor, ele deve colocá-lo em LRESULT apontado pelo resultado.
Para cada mensagem, pNotifyStruct aponta para uma estrutura de NMHDR ou uma estrutura de TBNOTIFY . Essas estruturas são descritas abaixo:
A estrutura NMHDR contém os seguintes membros:
typedef struct tag&NMHDR {
HWND hwndFrom; nbsp; / / identificador do controle enviar mensagem
UINT idFrom; / / identificador do controle enviar mensagem
Código UINT; / / código de notificação; Veja abaixo
} NMHDR
hwndFrom
Identificador de janela do Controlarar que está enviando a notificação. Para converter este identificador para um ponteiro de CWnd , use CWnd::FromHandle.
idFrom
Identificador do Controlarar enviar 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 comuns de notificação listados abaixo:
A estrutura TBNOTIFY contém os seguintes membros:
typedef struct {
Hdr &NMHDR; / / informações comuns a todas as mensagens WM_NOTIFY
iItem int; / / índice de botão associado com a notificação
TBBUTTON tbButton; / / informações sobre o botão associado com a notificação
int cchText; nbsp; / / Contagem de caracteres no texto do botão
LPSTR lpszText; / / endereço do texto do botão
} TBNOTIFY, ATÉ AGORA * LPTBNOTIFY
hdr
Informações comuns a todas as mensagens WM_NOTIFY.
iItem
Índice do botão associado com a notificação.
tbButton
TBBUTTON estrutura que contém informações sobre o botão de barra de ferramentas associado com a notificação.
cchText
Contagem de caracteres no texto do botão.
lpszText
Ponteiro para o texto do botão.
As notificações que da barra de ferramentas envia são as seguintes: