Aldeia Numaboa
Um portal diferente em Português do Brasil
Informática da Aldeia

Tutoriais
Home Informática Tutoriais MASM Cap.V - Nossa primeira janela

Na Aldeia

Há 113 visitantes online

2796 registros
0 hoje
6 nesta semana
4 neste mês

Boas vindas: delilah

Estatística

Artigos: 847
Artigos lidos: 3919015
Arquivados: 41
Downloads: 416
Baixados: 161778
Glossário: 1198
Bibliografia: 24
JoomlaWatch Stats 1.2.7 by Matej Koval

Visitas de onde?

88,3%Brasil Brasil
9,2%Portugal Portugal
0,8%EUA EUA
0,2%Espanha Espanha
0,1%Alemanha Alemanha

Visitantes

Hoje: 484
Ontem: 1940
Esta semana: 2424
Semana passada: 12942
Este mês: 2424
Mês passado: 52379
Total: 123709

Registro/Login

Para fazer login ou registrar-se

Usuários registrados têm algumas regalias!

Seg

17

Dez

2007


19:40

Cap.V - Nossa primeira janela PDF Imprimir Indique esta página
Avaliação: / 1
PiorMelhor 
Tutoriais - MASM + RadASM
Escrito por vovó Vicki   


Índice do Artigo
Cap.V - Nossa primeira janela
Criando a janela
Criando a janela II
Novo modelo
Solução da Fig.4
Solução da Fig.5
Exercícios e Downloads
Todas as páginas

Nível Intermediário

Masm32+RadASM

Capítulo V: Nossa primeira janela

Escrito por: ^A|An M0r3N0^

Conselheiro: RedH@wk

Tradução: ~Uglinho~


O presente texto foi escrito para fins educacionais e de pesquisa e é de livre distribuição contanto que se preserve o conteúdo e os direitos do autor.

Nossa primeira janela

Chegou o momento de criar aplicações com janelas e adicionar botões, imagens e outros controles.

Primeiro criaremos uma janela feita com APIs puras, como mostra o vídeo. Preste muita atenção:

Vídeo 1
prog009.exe

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

Biblioteca kernel32.lib
 
GetModuleHandle, NULL

Esta função devolve o handle do módulo ou instância do programa. Todos os programas que utilizam janelas utilizam esta função, então guardamos o valor devolvido para EAX numa variável que, neste caso, se chama Hinstance:

mov Hinstance,eax

Depois precisamos utilizar a estrutura WNDCLASSEX que contém toda informação requerida para criar nossa janela. Colocamos essa informação com a instrução MOV e, para utilizá-la, declaramos a etiqueta wc como WNDCLASSEX desta maneira:

wc WNDCLASSEX <>

Se buscarmos ajuda no Win32 Programmer's Reference para saber sobre cada elemento da estrutura, ela mostrará o seguinte:

typedef struct _WNDCLASSEX {  // wc 
   UINT cbSize; 
   UINT style; 
   WNDPROC lpfnWndProc; 
   int cbClsExtra; 
   int cbWndExtra; 
   HANDLE hInstance; 
   HICON hIcon; 
   HCURSOR hCursor; 
   HBRUSH hbrBackground; 
   LPCTSTR lpszMenuName; 
   LPCTSTR lpszClassName; 
   HICON hIconSm; 
} WNDCLASSEX;
  1. cbSize - é aqui que especificamos o tamanho da estrutura. Quando não sabemos o tamanho, utilizamos o operador SIZEOF:
    mov wc.cbSize, SIZEOF WNDCLASSEX
  2. style - especificamos o estilo da nossa janela. Há vários tipos (ver a ajuda antes mencionada) como, por exemplo, os que utilizamos: CS_HREDRAW e CS_VREDRAW. Se quisermos combiná-los podemos utilizar a instrução OR:
    mov wc.style, CS_HREDRAW or CS_VREDRAW
  3. lpfnWndProc - definimos o endereço da etiqueta dos procedimentos:
    mov wc.lpfnWndProc, offset WinProC
  4. cbClsExtra - especificamos o número de bytes extras para localizar a estrutura da janela, mas nós não a utilizamos e movemos o valor zero ou NULL:
    mov wc.cbClsExtra,NULL
  5. cbClsExtra - especificamos o número de bytes extras para localizar a instância da janela. Como no anterior, não precisaremos dele e movemos o valor zero.
    mov wc.cbWndExtra,NULL
  6. hInstance - especificamos o manipulador (handle) da instância do módulo:
    push Hinstance 
    pop wc.hInstance
  7. hIcon - especificamos o manipulador do ícone. Para isto utilizamos a função LoadIcon:
    invoke LoadIcon,Hinstance,IDI_APPLICATION 
    mov wc.hIcon,eax
  8. hCursor - especificamos o manipulador de cursor. Para isto utilizamos a função LoadCursor:
    invoke LoadCursor,NULL,IDC_ARROW 
    mov wc.hCursor,eax
  9. hbrBackground - especificamos a cor de fundo da nossa janela:
    mov wc.hbrBackground, COLOR_BTNFACE + 1
  10. lpszMenuName - especificamos o manipulador do Menu.
    mov wc.lpszMenuName,NULL
  11. lpszClassName - definimos o endereço da etiqueta onde se encontra o nome (ASCII) da classe da janela.
    mov wc.lpszClassName,offset Classname
  12. hIconSm - especificamos o manipulador de ícone pequeno.


Última atualização ( Sáb, 26.04.2008 20:32 )
 

Topo

Topo