Partilhar via


Sobre os Menus

Uma menu é uma lista de itens que especificam opções ou grupos de opções (um submenu) para uma aplicação. Clicar em um item de menu abre um submenu ou faz com que o aplicativo execute um comando. Esta seção fornece informações sobre os seguintes tópicos:

Um menu é organizado em uma hierarquia. No nível superior da hierarquia está a barra de menus ; que contém uma lista de menus, que por sua vez pode conter submenus. Uma barra de menus às vezes é chamada de menu de nível superior, e os menus e submenus também são conhecidos como menus pop-up .

Um item de menu pode executar um comando ou abrir um submenu. Um item que executa um comando é chamado de item de comando ou comando.

Um item na barra de menus quase sempre abre um menu. As barras de menus raramente contêm itens de comando. Um menu que se abre a partir da barra de menus desce e é às vezes chamado de menu suspenso . Quando um menu suspenso é exibido, ele é anexado à barra de menus. Um item de menu na barra de menus que abre um menu suspenso também é chamado de nome de menu .

Os nomes de menu em uma barra de menus representam as principais categorias de comandos que um aplicativo fornece. Selecionar um nome de menu na barra de menus normalmente abre um menu cujos itens de menu correspondem aos comandos de uma categoria. Por exemplo, uma barra de menus pode conter um Nome de menu Arquivo que, quando clicado pelo usuário, ativa um menu com itens de menu como Novo, Abrire Salvar. Para obter informações sobre uma barra de menus, ligue GetMenuBarInfo.

Apenas uma janela sobreposta ou pop-up pode conter uma barra de menus; uma janela filha não pode conter uma. Se a janela tiver uma barra de título, o sistema posiciona a barra de menus logo abaixo dela. Uma barra de menus está sempre visível. Um submenu não é visível, no entanto, até que o usuário selecione um item de menu que o ativa. Para obter mais informações sobre janelas sobrepostas e pop-up, consulte Tipos de janela.

Cada menu deve ter uma janela proprietária. O sistema envia mensagens para a janela do proprietário de um menu quando o usuário seleciona o menu ou escolhe um item no menu.

Esta seção discute os seguintes tópicos.

Menus de atalho

O sistema também fornece menus de atalho. Um menu de atalho não está anexado à barra de menus; ele pode aparecer em qualquer lugar na tela. Um aplicativo normalmente associa um menu de atalho a uma parte de uma janela, como a área do cliente, ou a um objeto específico, como um ícone. Por esse motivo, esses menus também são chamados de menus de contexto .

Um menu de atalho permanece oculto até que o usuário o ative, geralmente clicando com o botão direito do mouse em uma seleção, uma barra de ferramentas ou um botão da barra de tarefas. O menu geralmente é exibido na posição do cursor ou do mouse.

O menu da janela

O menu Janela (também conhecido como menu do Sistema ou menu de Controle) é um menu pop-up definido e gerido quase exclusivamente pelo sistema operativo. O usuário pode abrir o menu da janela clicando no ícone do aplicativo na barra de título ou clicando com o botão direito do mouse em qualquer lugar na barra de título.

O menu Janela fornece um conjunto padrão de itens de menu que o utilizador pode escolher para alterar o tamanho ou a posição de uma janela, ou fechar a aplicação. Os itens no menu da janela podem ser adicionados, excluídos e modificados, mas a maioria dos aplicativos apenas usa o conjunto padrão de itens de menu. Uma janela sobreposta, pop-up ou filho pode ter um menu de janela. É incomum que uma janela sobreposta ou pop-up não inclua um menu de janela.

Quando o utilizador escolhe um comando no menu Janela, o sistema envia uma mensagem WM_SYSCOMMAND para a janela proprietária do menu. Na maioria dos aplicativos, o procedimento de janela não processa mensagens do menu da janela. Em vez disso, ele simplesmente passa as mensagens para o função de DefWindowProc para o processamento padrão do sistema da mensagem. Se um aplicativo adicionar um comando ao menu da janela, o procedimento da janela deverá processar o comando.

Uma aplicação pode usar a função GetSystemMenu para criar uma cópia do menu de janela padrão para modificar. Qualquer janela que não use o função GetSystemMenu para fazer sua própria cópia do menu da janela recebe o menu de janela padrão.

Identificador de Ajuda

Associado a cada barra de menus, menu, submenu e menu de atalho está um identificador de ajuda. Se o usuário pressionar a tecla F1 enquanto o menu estiver ativo, esse valor será enviado para a janela do proprietário como parte de uma mensagem WM_HELP.

Acesso do teclado aos menus

O sistema fornece uma interface de teclado padrão para menus. Você pode melhorar essa interface fornecendo teclas de acesso mnemônico e teclas de atalho (acelerador) para seus itens de menu.

Os tópicos a seguir descrevem a interface de teclado padrão, teclas de acesso e teclas de atalho:

Interface de teclado padrão

O sistema foi concebido para funcionar com ou sem um rato ou outro dispositivo apontador. Como o sistema fornece uma interface de teclado padrão, o usuário pode usar o teclado para selecionar itens de menu. Esta interface de teclado não precisa de código especial. Um aplicativo recebe uma mensagem de comando se o usuário seleciona um item de menu através do teclado ou usando um mouse. A interface de teclado padrão processa as seguintes teclas pressionadas.

Pressionamento de tecla Ação
Caractere alfabético Seleciona o primeiro item de menu com o caractere especificado como chave de acesso. Se o item selecionado invocar um menu, o menu será exibido e o primeiro item será realçado. Caso contrário, escolhe-se o item de menu.
ALT Alterna entre o modo de barra de menus e fora dele.
ALT+BARRA DE ESPAÇO Exibe o menu da janela.
ENTRAR Ativa um menu e seleciona o primeiro item de menu se um item tiver um menu associado a ele. Caso contrário, esse pressionamento de tecla escolhe o item como se o usuário soltasse o botão do mouse enquanto o item estava selecionado.
ESC Sai do modo de menu.
SETA PARA A ESQUERDA Alterna para o item de menu de nível superior anterior. Os itens de menu de nível superior incluem nomes de menu e o menu de janela. Se o item selecionado estiver em um menu, a coluna anterior no menu será selecionada ou o item de menu de nível superior anterior será selecionado.
SETA PARA A DIREITA Funciona como a tecla de seta para a esquerda, exceto na direção oposta. Nos menus, esse pressionamento de tecla avança uma coluna; Quando o item atualmente selecionado estiver na coluna mais à direita, o menu Seguinte será selecionado.
SETAS PARA CIMA OU PARA BAIXO Ativa um menu quando o nome do menu é pressionado. Quando pressionada num menu, a tecla SETA PARA CIMA seleciona o item anterior; a tecla SETA PARA BAIXO seleciona o próximo item.

 

A interface de teclado padrão para menus pode ser melhorada adicionando teclas de acesso (mnemónicas) aos itens de menu. Uma chave de acesso é uma letra sublinhada no texto de um item de menu. Quando um menu está ativo, o usuário pode selecionar um item de menu pressionando a tecla que corresponde à letra sublinhada do item. O usuário torna a barra de menus ativa pressionando a tecla ALT para realçar o primeiro item na barra de menus. Um menu fica ativo quando é exibido.

Para criar uma chave de acesso para um item de menu, preceda qualquer caractere na sequência de texto do item com um E comercial. Por exemplo, a cadeia de texto "&Move" faz com que o sistema sublinhe a letra "M".

Além de ter uma tecla de acesso, um item de menu pode ter uma tecla de atalho associada a ele. Uma tecla de atalho é diferente de uma tecla de acesso, porque o menu não precisa estar ativo para que a tecla de atalho funcione. Além disso, uma tecla de acesso é sempre associada a um item de menu, enquanto uma tecla de atalho é geralmente (mas não precisa ser) associada a um item de menu.

O texto que identifica a tecla de atalho é adicionado à cadeia de texto do item de menu. O texto de atalho aparece à direita do nome do item de menu, após uma barra invertida e um tab (\t). Por exemplo, "&Close\tAlt+F4" representa um comando Fechar com a combinação de teclas ALT+F4 como tecla de atalho e com a letra "C" como chave de acesso. Para obter mais informações, consulte Aceleradores de teclado.

Você pode criar um menu usando um modelo de menu ou funções de criação de menu. Os modelos de menu são normalmente definidos como recursos. Os recursos de modelo de menu podem ser carregados explicitamente ou atribuídos como o menu padrão para uma classe de janela. Você também pode criar recursos de modelo de menu dinamicamente na memória.

Os tópicos a seguir descrevem a criação de menus em detalhes:

A maioria dos aplicativos cria menus usando recursos de modelo de menu. Um modelo de menu define um menu, incluindo os itens na barra de menus e todos os menus. Para obter informações sobre como criar um recurso de modelo de menu, consulte a documentação incluída com suas ferramentas de desenvolvimento.

Depois de criar um recurso de modelo de menu e adicioná-lo ao arquivo executável (.exe) do seu aplicativo, você pode usar a função LoadMenu para carregar o recurso na memória. Esta função retorna um identificador para o menu, que você pode atribuir a uma janela usando a função SetMenu. Você pode atribuir um menu a qualquer janela que não seja uma janela filha.

A implementação de menus como recursos torna um aplicativo mais fácil de localizar para uso em vários países/regiões. Somente o arquivo de definição de recursos precisa ser localizado para cada idioma, não para o código-fonte do aplicativo.

Um menu pode ser criado a partir de um modelo de menu que é construído na memória em tempo de execução. Por exemplo, um aplicativo que permite que um usuário personalize seu menu pode criar um modelo de menu na memória com base nas preferências do usuário. O aplicativo poderia então salvar o modelo em um arquivo ou no registro para uso futuro. Para criar um menu a partir de um modelo na memória, use a funçãoLoadMenuIndirect. Para obter descrições de formatos de modelo de menu, consulte Recursos de modelo de menu.

Um modelo de menu standard consiste em uma estrutura MENUITEMTEMPLATEHEADER seguida por uma ou mais estruturas MENUITEMTEMPLATE.

Um modelo de menu estendido consiste em uma estrutura MENUEX_TEMPLATE_HEADER seguida por uma ou mais estruturas MENUEX_TEMPLATE_ITEM.

O sistema gera um identificador único para cada menu. Um identificador de menu é um valor do tipo de HMENU. Um aplicativo deve especificar um identificador de menu em muitas das funções de menu. Você recebe um identificador para uma barra de menus quando cria o menu ou carrega um recurso de menu.

Para recuperar um identificador para a barra de menus de um menu que foi criado ou carregado, use a função GetMenu. Para recuperar um identificador para o submenu associado a um item de menu, use a função GetSubMenu ou a função GetMenuItemInfo. Para recuperar um identificador para um menu de janela, use a função GetSystemMenu.

Usando funções de criação de menus, você pode criar menus em tempo de execução ou adicionar itens de menu aos menus existentes. Você pode usar a função CreateMenu para criar uma barra de menus vazia e a funçãoCreatePopupMenu para criar um menu vazio. Você pode salvar determinadas informações de configurações para um menu usando o MENUINFO estrutura. Para obter ou recuperar as configurações de um menu, use GetMenuInfo ou SetMenuInfo. Para adicionar itens a um menu, use a funçãoInsertMenuItem. As funções antigas de AppendMenu e de InsertMenu ainda são suportadas, mas InsertMenuItem deve ser usada para novos aplicativos.

Depois que um menu for carregado ou criado, ele deve ser atribuído a uma janela antes que o sistema possa exibi-lo. Você pode atribuir um menu definindo um menu de classe. Para obter mais informações, consulte Window Class Menus. Você também pode atribuir um menu a uma janela especificando um identificador para o menu como o parâmetro hMenu da função CreateWindow ou da função CreateWindowEx, ou chamando a função SetMenu.

Para exibir um menu de atalho, use a função TrackPopupMenuEx. Os menus de atalho, também chamados de menus pop-up flutuantes ou menus de contexto, geralmente são exibidos quando a mensagem WM_CONTEXTMENU é processada.

Você pode atribuir um menu a qualquer janela que não seja uma janela filha.

A função mais antiga TrackPopupMenu ainda é suportada, mas novos aplicativos devem usar a função TrackPopupMenuEx.

Menus de classe de janela

Você pode especificar um menu padrão, chamado de menu de classe , ao registrar uma classe de janela. Para fazer isso, atribua o nome do recurso do modelo de menu ao membro lpszMenuName da estrutura WNDCLASS usada para registrar a classe.

Por padrão, cada janela recebe o menu de classe para sua classe de janela para que você não precise carregar explicitamente o menu e atribuí-lo a cada janela. Você pode substituir o menu de classe especificando um identificador de menu diferente em uma chamada para a funçãoCreateWindowEx. Você também pode alterar o menu de uma janela depois que ela é criada usando a funçãoSetMenu. Para mais informações, consulte Window Classes.

Os tópicos a seguir discutem o que o sistema faz quando o usuário escolhe um item de menu e as maneiras como um aplicativo pode controlar a aparência e a funcionalidade de um item:

Itens de comando e itens que abrem submenus

Quando o usuário escolhe um item de comando, o sistema envia uma mensagem de comando para a janela que possui o menu. Se o item de comando estiver no menu da janela, o sistema enviará a mensagem WM_SYSCOMMAND. Caso contrário, ele envia a mensagem WM_COMMAND.

Cada item de menu que abre um submenu tem associado um identificador para o submenu correspondente. Quando o usuário aponta para tal item, o sistema abre o submenu. Nenhuma mensagem de comando é enviada para a janela do proprietário. No entanto, o sistema envia uma mensagem WM_INITMENUPOPUP para a janela do proprietário antes de exibir o submenu. Você pode obter um identificador para o submenu associado a um item usando a função GetSubMenu ou a função GetMenuItemInfo .

Uma barra de menus normalmente contém nomes de menus, mas também pode conter itens de comando. Um submenu normalmente contém itens de comando, mas também pode conter itens que abrem submenus aninhados. Ao adicionar esses itens aos submenus, podes aninhar os menus em qualquer profundidade. Para fornecer uma sugestão visual para o usuário, o sistema exibe automaticamente uma pequena seta à direita do texto de um item de menu que abre um submenu.

Associado a cada item de menu está um inteiro exclusivo definido pelo aplicativo, chamado de identificador de item de menu . Quando o usuário escolhe um item de comando em um menu, o sistema envia o identificador do item para a janela do proprietário como parte de uma mensagem de WM_COMMAND. O procedimento de janela examina o identificador para determinar a origem da mensagem e processa a mensagem de acordo. Além disso, você pode especificar um item de menu usando seu identificador ao chamar funções de menu; por exemplo, para ativar ou desativar um item de menu.

Os itens de menu que abrem submenus têm identificadores exatamente como os itens de comando. No entanto, o sistema não envia uma mensagem de comando quando tal item é selecionado em um menu. Em vez disso, o sistema abre o submenu associado ao item de menu.

Para recuperar o identificador do item de menu em uma posição especificada, use a função GetMenuItemID ou função de GetMenuItemInfo.

Além de ter um identificador exclusivo, cada item de menu em uma barra de menu ou menu tem um valor de posição exclusivo. O item mais à esquerda em uma barra de menus, ou o item superior em um menu, tem a posição zero. O valor da posição é incrementado nos itens de menu subsequentes. O sistema atribui um valor de posição a todos os itens de um menu, incluindo separadores. A ilustração a seguir mostra os valores de posição dos itens em uma barra de menus e em um menu.

barra de menus e menu

Ao chamar uma função de menu que modifica ou recupera informações sobre um item de menu específico, você pode especificar o item usando seu identificador ou sua posição. Para obter mais informações, consulte a próxima seção.

Acessando itens de menu programaticamente

A maioria das funções de menu permite especificar um item de menu por posição ou por comando. Algumas funções usam os sinalizadores MF_BYPOSITION e MF_BYCOMMAND para indicar o algoritmo de pesquisa; outras têm um parâmetro fByPosition explícito. Se você especificar o item de menu por posição, o número do item será um índice baseado em zero no menu. Se você especificar o item de menu por comando, o menu e seus submenus serão pesquisados por um item cujo identificador de menu seja igual ao número do item fornecido. Se mais de um item na hierarquia de menu corresponder ao número do item, não será especificado qual deles será usado. Se os menus contiverem identificadores de menu duplicados, você deve usar operações de menu baseadas em posição para evitar essa ambiguidade.

Itens de menu padrão

Um submenu pode conter um item de menu padrão. Quando o usuário abre um submenu clicando duas vezes, o sistema envia uma mensagem de comando para a janela do proprietário do menu e fecha o menu como se o item de comando padrão tivesse sido escolhido. Se não houver nenhum item de comando padrão, o submenu permanecerá aberto. Para recuperar e definir o item padrão para um submenu, use as funções GetMenuDefaultItem e SetMenuDefaultItem.

Itens de menu selecionados e limpos

Um item de menu pode ser selecionado ou limpo. O sistema exibe um bitmap ao lado dos itens de menu selecionados para indicar seu estado selecionado. O sistema não exibe um bitmap ao lado de itens limpos, a menos que um bitmap "clear" definido pelo aplicativo seja especificado. Apenas os itens de menu de um menu podem ser selecionados; Os itens em uma barra de menus não podem ser selecionados.

Os aplicativos normalmente marcam ou desmarcam um item de menu para indicar se uma opção está em vigor. Por exemplo, suponha que um aplicativo tenha uma barra de ferramentas que o usuário pode mostrar ou ocultar usando um comando Barra de Ferramentas em um menu. Quando a barra de ferramentas está oculta, o item de menu Barra de Ferramentas é visível. Quando o usuário escolhe o comando, o aplicativo verifica o item de menu e mostra a barra de ferramentas.

Um atributo de marca de seleção controla se um item de menu está selecionado. Você pode definir o atributo de marca de seleção de um item de menu usando a função CheckMenuItem . Você pode usar a função GetMenuState para determinar se um item de menu está atualmente selecionado ou desmarcado.

Em vez de CheckMenuItem e GetMenuState, você pode usar as funções GetMenuItemInfo e SetMenuItemInfo para recuperar e definir o estado de verificação de um item de menu.

Às vezes, um grupo de itens de menu corresponde a um conjunto de opções mutuamente exclusivas. Nesse caso, pode indicar a opção selecionada usando um item de menu rádio selecionado (análogo a um botão de rádio). Os itens de rádio selecionados são exibidos com um bitmap de marcador em vez de um bitmap de marca de seleção. Para verificar um item de menu e torná-lo um item de rádio, use a funçãoCheckMenuRadioItem.

Por padrão, o sistema exibe uma marca de seleção ou um bitmap de marcador ao lado dos itens de menu selecionados e nenhum bitmap ao lado dos itens de menu desmarcados. No entanto, você pode usar a função SetMenuItemBitmaps para associar bitmaps selecionados e limpos definidos pelo aplicativo a um item de menu. Em seguida, o sistema usa os bitmaps especificados para indicar o estado selecionado ou limpo do item de menu.

Os bitmaps definidos pelo aplicativo associados a um item de menu devem ter o mesmo tamanho do bitmap da marca de seleção padrão, cujas dimensões podem variar dependendo da resolução da tela. Para recuperar as dimensões corretas, use a função GetSystemMetrics. Você pode criar vários recursos de bitmap para diferentes resoluções de tela; criar um recurso de bitmap e dimensioná-lo, se necessário; ou crie um bitmap em tempo de execução e desenhe uma imagem nele. Os bitmaps podem ser monocromáticos ou coloridos. No entanto, como os itens de menu são invertidos quando realçados, a aparência de determinados bitmaps de cores invertidas pode ser indesejável. Para obter mais informações, consulte Bitmaps.

Itens de menu habilitados, acinzentados e desativados

Um item de menu pode ser ativado, cinzento ou desativado. Por padrão, um item de menu está habilitado. Quando o usuário escolhe um item de menu habilitado, o sistema envia uma mensagem de comando para a janela do proprietário ou exibe o submenu correspondente, dependendo do tipo de item de menu que é.

Quando os itens de menu não estão disponíveis para o usuário, eles devem estar acinzentados ou desativados. Não é possível escolher itens de menu cinzentos e desativados. Um item desativado se parece com um item habilitado. Quando o usuário clica em um item desativado, o item não é selecionado e nada acontece. Os itens desativados podem ser úteis, por exemplo, em um tutorial que apresenta um menu que parece ativo, mas não está.

Um aplicativo acinzenta um item de menu indisponível para fornecer uma indicação visual ao usuário de que um comando não está disponível. Você pode usar um item cinza quando uma ação não é apropriada (por exemplo, você pode acinzentar o comando Imprimir no menu Arquivo quando o sistema não tiver uma impressora instalada).

A função EnableMenuItem habilita, cinza ou desabilita um item de menu. Para determinar se um item de menu está habilitado, cinza ou desabilitado, use a funçãoGetMenuItemInfo.

Em vez de GetMenuItemInfo, você também pode usar a funçãoGetMenuStatepara determinar se um item de menu está habilitado, cinza ou desabilitado.

Itens de menu realçados

O sistema destaca automaticamente os itens de menu nos menus à medida que o usuário os seleciona. No entanto, o realce pode ser explicitamente adicionado ou removido de um nome de menu na barra de menus usando a função HiliteMenuItem. Esta função não tem efeito sobre os itens de menu nos menus. No entanto, quando HiliteMenuItem é usado para realçar um nome de menu, o nome só parece estar selecionado. Se o usuário pressionar a tecla ENTER, o item realçado não será escolhido. Esse recurso pode ser útil, por exemplo, em um aplicativo de treinamento que demonstra o uso de menus.

Owner-Drawn itens de menu

Um aplicativo pode controlar completamente a aparência de um item de menu usando um item desenhado pelo proprietário . Os itens desenhados pelo proprietário exigem que um aplicativo assuma total responsabilidade pelos estados selecionados (realçados), selecionados e limpos. Por exemplo, se um aplicativo fornecesse um menu de fontes, ele poderia desenhar cada item de menu usando a fonte correspondente; o item para romano seria desenhado com romano, o item para itálico seria desenhado em itálico, e assim por diante. Para obter mais informações, consulte Criando itens de menu Owner-Drawn.

O sistema fornece um tipo especial de item de menu, chamado separador, que aparece como uma linha horizontal. Você pode usar um separador para dividir um menu em grupos de itens relacionados. Um separador não pode ser usado em uma barra de menus e o usuário não pode selecionar um separador.

Quando uma barra de menus contém mais nomes de menu do que caberá em uma linha, o sistema encapsula a barra de menus dividindo-a automaticamente em duas ou mais linhas. Você pode fazer com que uma quebra de linha ocorra em um item específico em uma barra de menus atribuindo o sinalizador de tipo MFT_MENUBREAK ao item. O sistema coloca esse item e todos os itens subsequentes em uma nova linha.

Quando um menu contém mais itens do que caberá em uma coluna, o menu será truncado. Você pode fazer com que uma quebra de coluna ocorra em um item específico em um menu atribuindo o sinalizador de tipo MFT_MENUBREAK ao item ou usando a opção MENUBREAK na instrução MENUITEM. O sistema coloca esse item e todos os itens subsequentes em uma nova coluna. O sinalizador de tipo MFT_MENUBARBREAK tem o mesmo efeito, exceto que uma linha vertical aparece entre a nova coluna e a antiga.

Se utilizar as funções AppendMenu, InsertMenu, ou ModifyMenu para atribuir quebras de linha, deverá atribuir os sinalizadores de tipo MF_MENUBREAK ou MF_MENUBARBREAK.

Mensagens usadas com menus

O sistema reporta a atividade relacionada ao menu enviando mensagens para o procedimento da janela que é proprietária do menu. O sistema envia uma série de mensagens quando o usuário seleciona itens na barra de menus ou clica no botão direito do mouse para exibir um menu de atalho.

Quando o usuário ativa um item na barra de menus, a janela do proprietário recebe primeiro uma mensagem WM_SYSCOMMAND. Esta mensagem inclui um sinalizador que indica se o usuário ativou o menu usando o teclado (SC_KEYMENU) ou o mouse (SC_MOUSEMENU). Para obter mais informações, consulte Acesso do Teclado aos Menus.

Em seguida, antes de exibir quaisquer menus, o sistema envia a mensagem WM_INITMENU para o procedimento de janela para que um aplicativo possa modificar os menus antes que o usuário os veja. O sistema envia a mensagem WM_INITMENU apenas uma vez por ativação do menu.

Quando o usuário aponta para um item de menu que abre um submenu, o sistema envia à janela do proprietário a mensagem WM_INITMENUPOPUP antes de exibir o submenu. Esta mensagem dá ao aplicativo a oportunidade de modificar o submenu antes que ele seja exibido.

Cada vez que o utilizador move o realce de um item para outro, o sistema envia uma mensagem WM_MENUSELECT para o procedimento da janela do proprietário do menu. Esta mensagem identifica o item de menu selecionado no momento. Muitos aplicativos fornecem uma área de informações na parte inferior de suas janelas principais e usam essa mensagem para exibir informações adicionais sobre o item de menu selecionado.

Quando o usuário escolhe um item de comando em um menu, o sistema envia uma mensagem WM_COMMAND para o procedimento da janela. A palavra de ordem inferior do parâmetro wParam da mensagem WM_COMMAND contém o identificador do item escolhido. O procedimento da janela deve examinar o identificador e processar a mensagem em conformidade.

Você pode salvar informações para um menu usando o MENUINFO estrutura. Se o menu for definido com um MENUINFO.dwStyle valor de MNS_NOTIFYBYPOS, o sistema envia WM_MENUCOMMAND em vez do WM_COMMAND quando um item é selecionado. Isso permite que se aceda às informações na estrutura MENUINFO e também fornece o índice do item selecionado diretamente.

Nem todos os menus são acessíveis através da barra de menus de uma janela. Muitos aplicativos exibem menus de atalho quando o usuário clica no botão direito do mouse em um local específico. Tais aplicativos devem processar a mensagem WM_CONTEXTMENU e exibir um menu de atalho, se apropriado. Se um aplicativo não exibir um menu de atalho, ele deve passar a mensagem WM_CONTEXTMENU para a funçãoDefWindowProcpara processamento padrão.

A mensagem WM_MENURBUTTONUP é enviada quando o usuário libera o botão direito do mouse enquanto o cursor está em um item de menu. Essa mensagem é fornecida para que os aplicativos possam exibir um menu de atalho ou contextual para um item de menu.

Existem algumas mensagens que envolvem apenas menus de arrastar e soltar. O WM_MENUGETOBJECT é enviado ao proprietário de um menu de arrastar e soltar quando o cursor do mouse entra em um item de menu ou se move do centro de um item para a parte superior ou inferior de um item. A mensagem WM_MENUDRAG é enviada quando o usuário realmente arrasta um item de menu.

Quando um menu suspenso ou um submenu é destruído, o sistema envia uma mensagem WM_UNINITMENUPOPUP.

Se um menu é atribuído a uma janela e essa janela é destruída, o sistema destrói automaticamente o menu e seus submenus, liberando o identificador do menu e a memória ocupada pelo menu. O sistema não destrói automaticamente um menu que não está atribuído a uma janela. Um aplicativo deve destruir o menu não atribuído chamando a função DestroyMenu. Caso contrário, o menu continua a existir na memória mesmo após o fechamento do aplicativo. Para encerrar o menu ativo do thread de chamada, use EndMenu. Se uma plataforma não suportar EndMenu, envie uma mensagem de WM_CANCELMODE ao responsável pelo menu ativo.