A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Tutoriais e Programação

Cap.V - Nossa primeira janela

Seg

17

Dez

2007


19:40

(4 votos, média 4.75 de 5) 


Solução da Fig. 4

Vídeo 3
prog010.exe

vovo Para assistir ao vídeo, faça o download de prog010.exe.

No vídeo encontramos a mensagem WM_CREATE. Esta mensagem se envia antes de mostrar a janela e, como seu nome indica, serve para criar novas janelas filhas, mas também pode ser usada para outros fins.

.ELSEIF uMsg==WM_CREATE invoke CreateWindowEx,NULL,addr Class_boton,addr Texto_boton01,\ WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,\ 10,75,100,25,hWnd,NULL,hInstance,NULL mov hwnd_botao01,eax

Já sabemos para que serve cada parâmetro desta função. O novo é que encontramos uma nova classe de janela filha e também carregamos o 9º parâmetro.

A classe nova da janela filha é:

Class_boton db "button",0

Com esta classe se cria um botão. No 9º parâmetro colocamos hWnd porque contém o handle da janela mãe e serve para criar outros controles (janelas filhas) na janela principal.

Se quisermos criar vários botões, declaramos apenas uma vez a classe da janela. Outra coisa importante é que, quando formos criar o controle, se formos fazer algo com ele, será necessário guardar seu handle em uma variável como no meu caso:

mov hwnd_botao01,eax

O conteúdo do registrador EAX é movido para hwnd_botao01 para que, no futuro, possamos identificá-lo e utilizá-lo.

Logo depois encontramos outro tipo de mensagem, WM_COMMAND. Esta outra se envia quando tocamos ou quando clicamos um item ou controle. O manipulador do objeto tocado ou clicado se encontra em lParam. Também existe wParam, mas nele se encontram a ID e o código de notificação. Isto veremos mais adiante quando entrarmos em janelas com diálogo.

.elseif uMsg== WM_COMMAND mov edx,lParam

Então movemos o handle que contém lParam para EDX porque, como se sabe, não se pode comparar variáveis com variáveis.

.if edx == hwnd_botao01 .elseif edx == hwnd_botao02 .endif

Com estas comprovações comparamos todos os manipuladores dos nossos botões para que, quando se pressionar só um, só este será igual. Logo, para estes botões serão atribuídas diferentes funções.

if edx == hwnd_boton01 invoke MessageBox,hWnd,........ . elseif edx== hwnd_boton02 invoke DestroyWindow,hWnd .endif

Aqui damos para cada botão uma função. Neste caso o botão 01 mostrará uma mensagem e o botão 02 fechará o programa.

Nota: se você agragar uma nova mensagem, façca-o com .elseif uMsg==MINHA_MENSAGEM.

Biblioteca kernel32.lib DestroyWindow,hWnd

Com esta função destruímos a janela mãe.

Informações adicionais