|
Neste tutorial vamos explorar um pouco mais os recursos, focalizando especificamente os menus.
|
| PROJETO MENUS |
|
Como sempre, nosso primeiro passo é planejar nosso programa: |
| 1. SOBRE OS MENUS |
|
O menu é um dos componentes mais importantes da sua janela pois apresenta uma lista de serviços que seu programa oferece aos usuários. Por mais que se queira inovar, os usuários já se acostumaram com um "padrão" de menu universalmente aceito: precisa ter como primeiro item [Arquivo] - [File], com os recursos de abrir, salvar, salvar como, imprimir, sair, etc, e como último item [Ajuda] - [Help]. Geralmente o segundo item é [Editar] - [Edit], com as opções de copiar, colar, procurar, etc. Quanto mais simples, mais eficiente será o menu. Procure indicar com reticências (...) se o item chamar uma caixa de diálogo e não se esqueça de adicionar as teclas de atalho que correspondem a cada item (se houver).
Menus são um tipo de recurso. Já vimos no tutorial "Usando Recursos" que existem vários tipos de recursos como ícones, bitmaps, diálogos, menus, etc. Os recursos são descritos num arquivo em separado, o chamado arquivo de recursos, geralmente com a extensão .rc. Também já vimos que existe uma linguagem própria para descrever os recursos, a "Resource Script Language". Podemos usar`qualquer editor de texto para escrevê-los. Os arquivos de recursos precisam ser compilados e depois combinados com o código fonte do seu programa na fase de linkedição.
Um recurso menu define a aparência e a funcionalidade de um menu.
|
| 2. A SINTAXE DO RECURSO MENU |
|
Inicialmente defina o nome, o tipo e a área que conterá as características do recurso:
O nome do recurso é meuMenu, o tipo é MENU e a área está delimitada por chaves. As chaves podem ser substitídas por BEGIN e END.
Na lista do menu podemos usar as palavras-chave MENUITEM e POPUP. A declaração de POPUP é para itens especiais que mostram uma lista de sub-itens quando são selecionados. A declaração MENUITEM define um item único, sem sub-itens. A sintaxe de MENUITEM é a seguinte:
A forma MENUITEM SEPARATOR da declaração MENUITEM cria um item de menu inativo que serve como barra divisória entre dois itens de menu M ativos.
A sintaxe de POPUP é:
As opções GRAYED e INACTIVE NÃO podem ser usadas em conjunto.
|
| 3. EXEMPLO DE RECURSO MENU |
|
lanchonete MENU BEGIN
END
|
| 4. MENU PADRÃO DA CLASSE |
|
Para que um menu seja o menu padrão de uma classe, é preciso incluí-lo na estrutura WNDCLASSEX. A partir daí, toda janela que for criada a partir da classe definida por esta estrutura estará associada a este menu padrão da classe - o menu default.
|
| 4a. Adicionando um menu padrão |
|
A esta altura do campeonato você já está careca de saber que existe um modelo de criação de janelas na Caixa de Ferramentas. Vamos apenas adicionar e destacar a inclusão do menu "lanchonete". ...
.DATA
.CODE
|
| 5. MENU ESPECÍFICO DO OBJETO |
|
Um dos parâmetros da função CreateWindowEx é para indicar o menu associado à janela que está sendo criada, por isso mesmo, um menu particular. Este menu particular tem precedência sobre o menu padrão da classe. Em outras palavras, caso tenham sido definidos um menu padrão na classe e um menu específico ao criar um objeto desta classe, somente o menu específico é mostrado. Portanto, podemos definir um menu para a classe, um menu para o objeto ou os dois. Só para relembrar, aqui vai a função: HWND CreateWindowEx(
);
|
| 5a. Adicionando um menu específico |
|
...
.DATA
.DATA?
.CODE
|
| 6. GERENCIANDO AS SELEÇÕES DE ITENS |
|
Quando o usuário seleciona um item de menu, o sistema gera uma mensagem WM_COMMAND cujo parâmetro wParam contém o identificador (ID) deste item. O identificador ocupa apenas a palavra (word) menos significativa de wParam (Se você tiver dúvidas, leia mais sobre palavra menos significativa em "Registradores"). Podemos então armazenar o ID do item de menu em AX, compará-lo com os IDs definidos para cada item no arquivo de recursos e definir o procedimento adequado.
Fica mais prático definir constantes que correspondam aos IDs de cada item de menu. É claro que seus valores precisam ser os definidos no arquivo de recursos. ... .CONST
... .CODE
|
| 7. Janela com menu padrão |
![]() |
| ATÉLOGO |
|
Resumindo:
Para download:
O arquivo tutNB08.zip (15 Kb) contém os código fonte e os exemplos deste tutorial.
|