Informática Numaboa - Tutoriais e Programação
Cap. VI - Caixas de Diálogo
Qui 20 Dez 2007 08:03 |
- Detalhes
- Categoria: MASM + RadASM
- Atualização: Quinta, 18 Junho 2009 11:26
- Autor: Alan Moreno
- Acessos: 9639
Vamos continuar praticando e, desta vez, criaremos uma janela com 2 botões que terão funções diferentes. O primeiro botão será para mostrar uma mensagem e o segundo será para sair.
Para assistir ao vídeo, faça o download de prog14.exe.
Já vimos no capítulo V em que momento se envia a mensagem WM_COMMAND. Se não tiver lido, o conceito está na página 12 quando trabalhamos com caixas de diálogo e seus controles (e itens). Sempre os identificamos com uma ID e, sempre que quisermos trabalhar com um controle específico, o identificamos através da ID. A constante que guarda todas as IDs de controle no processo da janela é wParam. Além de lembrar que ela contém o código de notificação, para que fique bem claro, observem o seguinte quadro:
wParam | lParam | ||
HIGH | LOW | ||
CONTROLES (botões, edit, etc) | Contém o código de notificação | Contém a ID | Contém o manipulador da janela filha (handle) |
MENU | Sem utilidade | Contém a ID | Sem utilidade |
Exemplo - suponhamos que wParam contenha o valor 12345678. Neste caso o código de notificação é 1234 e a ID é 5678.
Este é um exemplo de como extrair o código de notificação:
A instrução SHR troca os bits de lugar deslocando-os para a direita. Os bits mais significativos desaparecem e as posições criadas à esquerda são preenchidas com 0.
Para não nos atrapalharmos com esta instrução, basta saber que ela é igual a dividir por 2 elevado ao Contador. Exemplo:
Desta maneira podemos obter o código de notificação se quisermos trabalhar com ele.
BN_CLICKED - este código de notificação é enviado quando clicamos em qualquer botão. Eu não o utilizo porque este valor de notificação tem 0 na esquerda. Por exemplo, a ID do botao01 é 1001 em decimal (03E9 em hexa). Quando clicamos o botao01, o valor de wParam será igual a 000003E9h onde o código de notificação, igual a BN_CLICKED, é 0000 e a ID é 03E9.
Comparamos se o valor do código de notificação é igual a 0. É por isto que evito todo este código e prefiro comparar as IDs porque sei que o código de notificação, quando clicamos, é 0 e está no lado esquerdo do nosso valor total. Como dizem, zero à esquerda não serve - exceto se, no nosso programa, quisermos utilizar o código de notificação e associá-los a funções para todos os botões.