Manipular notificações de personalização
Um controle comum de barra de ferramentas do Windows possui recursos internos de personalização, 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 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, fornecendo a barra de ferramentas do CCS_ADJUSTABLE estilo.Os recursos de personalização permitem que o usuário arraste um botão para uma nova posição ou remover um botão arrastando-o da barra de ferramentas.Além disso, o usuário pode clicar duas vezes para exibir a barra de ferramentas do Personalizar barra de ferramentas caixa de diálogo que permite ao usuário adicionar, excluir e reorganizar os botões da barra de ferramentas.O aplicativo pode exibir a caixa de diálogo usando o Personalizar função de membro.
O controle de 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ça a arrastar um botão, a barra de ferramentas automaticamente manipula a operação de arrastar.A barra de ferramentas envia a TBN_QUERYDELETE mensagem de notificação 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 captura a entrada do mouse e aguarda que o usuário solte o botão do mouse.
Quando o usuário libera o botão do mouse, o controle toolbar determina o local do cursor do mouse.Se o cursor está fora da barra de ferramentas, o botão será excluído.Se o cursor estiver em outro botão de barra de ferramentas, barra de ferramentas envia a TBN_QUERYINSERT mensagem de notificação para a janela pai para determinar se um botão pode ser inserido à esquerda do botão determinado.O botão será inserido se a janela pai retorna TRUE; Caso contrário, ele não é.A barra de ferramentas envia a TBN_TOOLBARCHANGE mensagem de notificação para sinalizar o final da operação arrastar.
Se o usuário começa uma operação de arrastar sem manter pressionada a tecla SHIFT, o controle de barra de ferramentas envia a TBN_BEGINDRAG mensagem de notificação 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 TBN_ENDDRAG mensagem de notificação para sinalizar o final da operação arrastar.
Um controle de barra de ferramentas envia mensagens de notificação quando o usuário personaliza uma barra de ferramentas usando o Personalizar barra de ferramentas caixa de diálogo.A barra de ferramentas envia a TBN_BEGINADJUST mensagem de notificação 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 TBN_QUERYINSERT mensagens de notificação 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 TBN_QUERYINSERT mensagens de notificação.Se a janela pai não retornar TRUE qualquer botão da barra de ferramentas destrói a caixa de diálogo.
Em seguida, o controle toolbar determina se quaisquer botões podem ser excluídos da barra de ferramentas, enviando um TBN_QUERYDELETE mensagem de notificação para cada botão na barra de ferramentas.A janela pai retorna TRUE para indicar que um botão pode ser excluído; Caso contrário, retorna FALSE.A barra de ferramentas adiciona todos os botões da barra de ferramentas da caixa de diálogo, mas grays aqueles que não podem ser excluídos.
Sempre que o controle de barra de ferramentas precisa de informações sobre um botão na caixa de diálogo Personalizar barra de ferramentas, ele envia o TBN_GETBUTTONINFO mensagem de notificação, especificando o índice do botão para o qual precisa de informações e o endereço de um TBNOTIFY estrutura.A janela pai deve preencher a estrutura com informações relevantes.
O Personalizar barra de ferramentas caixa de diálogo inclui um botão Ajuda e um botão Redefinir.Quando o usuário escolhe o botão Ajuda, o controle de barra de ferramentas envia a TBN_CUSTHELP mensagem de notificação.A janela pai deve responder, exibindo informações de Ajuda.A caixa de diálogo envia o TBN_RESET mensagem de notificação 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.
Essas mensagens são todas as WM_NOTIFY mensagens e elas podem ser tratadas na sua janela do proprietário, adicionando entradas de mapa da mensagem da seguinte forma ao mapa da mensagem da janela do proprietário:
ON_NOTIFY( wNotifyCode, idControl, memberFxn )
wNotifyCode
Notificação de mensagem código identificador, como TBN_BEGINADJUST.idControl
O identificador do controle enviar a notificação.memberFxn
A função de membro a ser chamado quando esta notificação é recebida.
Sua função de membro poderia ser declarada com o seguinte protótipo:
afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result );
Se o manipulador de notificação de mensagem retorna um valor, ele deve colocá-lo LRESULT apontada por resultado.
Para cada mensagem, pNotifyStruct aponta para um um NMHDR estrutura ou um TBNOTIFY estrutura.Essas estruturas são descritas abaixo:
O NMHDR estrutura 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;
hwndFrom
Identificador da janela do controle que está enviando a notificação.Para converter este identificador para um CWnd ponteiro, use CWnd::FromHandle.idFrom
Identificador do controle enviar a notificação.código
Código de notificação.Este 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:NM_CLICK o usuário clicou no botão esquerdo do mouse dentro do controle.
NM_DBLCLK o usuário clicou no botão esquerdo do mouse dentro do controle.
NM_KILLFOCUS o controle perde 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 no controle.
NM_RDBLCLK o usuário clicou no botão direito do mouse no controle.
NM_RETURN o controle tem o foco de entrada e o usuário pressionou a tecla ENTER.
NM_SETFOCUS o controle tiver recebido o foco de entrada.
O TBNOTIFY estrutura 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;
Comentários
HDR
Informações comuns a todos os WM_NOTIFY mensagens.iItem
Índice do botão associado à notificação.tbButton
TBBUTTONestrutura 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.
A barra de ferramentas envia notificações são:
TBN_BEGINADJUST enviados quando o usuário começa a personalização de um controle de barra de ferramentas.O ponteiro aponta para uma NMHDR estrutura que contém informações sobre a notificação.O manipulador não precisa retornar qualquer valor específico.
TBN_BEGINDRAG enviados quando o usuário começa a arrastar um botão em um controle barra de ferramentas.O ponteiro aponta para uma TBNOTIFY estrutura.O iItem membro contém o índice baseado em zero do botão sendo arrastado.O manipulador não precisa retornar qualquer valor específico.
TBN_CUSTHELP enviados quando o usuário escolhe o botão Ajuda na caixa de diálogo Personalizar barra de ferramentas.Nenhum valor de retorno.O ponteiro aponta para uma NMHDR estrutura que contém informações sobre a mensagem de notificação.O manipulador não precisa retornar qualquer valor específico.
TBN_ENDADJUST enviados quando o usuário interrompe a personalização de um controle de barra de ferramentas.O ponteiro aponta para uma NMHDR estrutura que contém informações sobre a mensagem de notificação.O manipulador não precisa retornar qualquer valor específico.
TBN_ENDDRAG enviados quando o usuário pára arrastando um botão em um controle barra de ferramentas.O ponteiro aponta para uma TBNOTIFY estrutura.O iItem membro contém o índice baseado em zero do botão sendo arrastado.O manipulador não precisa retornar qualquer valor específico.
TBN_GETBUTTONINFO enviados quando o usuário estiver personalizando um controle barra de ferramentas.A barra de ferramentas usa esta mensagem de notificação para recuperar as informações necessárias para a caixa de diálogo Personalizar barra de ferramentas.O ponteiro aponta para uma TBNOTIFY estrutura.O iItem membro Especifica o índice baseado em zero de um botão.O pszText e cchText membros especifiquem 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.Retornar TRUE se o botão informações foram copiadas para a estrutura ou FALSE contrário.
TBN_QUERYDELETE enviados enquanto o usuário estiver 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 TBNOTIFY estrutura.O iItem membro contém o índice baseado em zero do botão a ser excluído.Retornar TRUE para permitir que o botão a ser excluído ou FALSE para impedir que o botão seja excluído.
TBN_QUERYINSERT enviados enquanto o usuário estiver personalizando um controle de barra de ferramentas para determinar se um botão pode ser inserido à esquerda do botão determinado.O ponteiro aponta para uma TBNOTIFY estrutura.O iItem membro contém o índice baseado em zero do botão a ser inserido.Retornar TRUE para permitir que um botão a ser inserido na frente do botão determinado ou FALSE para impedir que o botão que está sendo inserido.
TBN_RESET enviados quando o usuário redefine o conteúdo da caixa de diálogo Personalizar barra de ferramentas.O ponteiro aponta para uma NMHDR estrutura que contém informações sobre a mensagem de notificação.O manipulador não precisa retornar qualquer valor específico.
TBN_TOOLBARCHANGE enviada depois que o usuário tiver personalizado a um controle de barra de ferramentas.O ponteiro aponta para uma NMHDR estrutura que contém informações sobre a mensagem de notificação.O manipulador não precisa retornar qualquer valor específico.