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) 


Isto serviu para personalizar a janelinha que vamos criar. Agora falta registrar sua classe. Para isto precisamos da função RegisterClassEx:

invoke RegisterClassEx,addr wc

Ao colocar wc, registramos todas as mudanças que fizemos nos elementos da estrutura. Isto é muito importante porque, se não o fizermos, nossa janela não abrirá.

Já definimos as características da nossa janela e sua classe também foi registrada. Agora falta criar a janela. O faremos com a seguinte função:

Biblioteca kernel32.lib CreateWindowEx, NULL, addr Classname, addr Appname, \ WS_OVERLAPPEDWINDOW, 150,210,00,200,NULL,NULL,Hinstance,NULL

Esta função da API é a encarregada de criar nossa janela e devolve o manipulador no registrador EAX. É recomendável guardá-lo em uma variável para, quando quisermos nos referir a ele, o identificarmos por meio desta variável. Esta função não só serve para isto, também pode criar controles de janelas chamadas de "filhas", como botões, campos de edição, testos estáticos, caixas de lista, etc. É por isto que vamos analisar o papel de cada parâmetro desta função:

HWND CreateWindowEx( DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam );
  1. dwExStyle - especificamos o estilo extra da nossa janela extendida, como por exemplo:
    WS_EX_TOPMOST - Cria uma janela por cima de todas. WS_EX_TRANSPARENT - Cria uma janela transparente. WS_EX_TOOLWINDOW - cria uma janela de ferramenta.
    Se quiserem comprovar, vocês podem colocar estes estilos no primeiro parâmetro e a função ficaria desta maneira:
    Invoke CreateWindowEx, WS_EX_TOPMOST, addr Classname... Se quiser saber mais sobre estilos veja o Win32 Programmer's Reference.
  2. lpClassName - definimos o endereço da etiqueta onde se encontra o nome (ASCII) da classe da janela.
  3. lpWindowName - definimos o endereço da etiqueta onde se encontra o nome da janela. Se não existir, pode-se usar o NULL.
  4. dwStyle - neste parâmetro especificamos a aparência da janela. Nós colocamos WS_OVERLAPPEDWINDOW porque combina vários estilos de aparência como:
    WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX e WS_MAXIMIZEBOX
    Se quisermos uma janela que só tenha o botão maximizar habilitado, nossa função ficaria assim:
    CreateWindowEx, NULL, addr Classname, addr Appname, WS_SYSMENU or WS_MAXIMIZEBOX,...
    Não esquecer que, se quisermos combinar estilos, usamos a instrução OR.
  5. X - especifica a coordenada da posição horizontal da janela cliente.
  6. Y - especifica a coordenada da posição vertical da janela cliente. Observemos as imagens:
Posição da janela
Fig. 1

Quando criamos controles de janela filha, como por exemplo um botão, o alcance das coordenadas estará dentro da janela mãe:

Janela filha
Fig. 2

Informações adicionais