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

Usando recursos (masm)

Qua

14

Jan

2009


17:12

(2 votos, média 5.00 de 5) 


O programa teste

Vamos criar uma janela que conterá o bitmap do recurso, portanto podemos partir do modelo "Janelas" que criamos no tutorial anterior.

.386 .MODEL FLAT,STDCALL option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib gerenteJanela proto :DWORD, :DWORD, :DWORD, :DWORD .DATA? mInstancia DWORD ? linhaComando DWORD ? .DATA NomeClasse db "JanelaNua",0 TituloJanela db "Janelinha NumaBoa",0 .CODE inicio: invoke GetModuleHandle, NULL mov mInstancia, eax invoke GetCommandLine mov linhaComando, eax invoke gerenteJanela, mInstancia, NULL, linhaComando, SW_SHOWDEFAULT invoke ExitProcess,0 gerenteJanela proc mInst:DWORD, mInstAnt:DWORD, linhaCmd:DWORD, Mostra:DWORD LOCAL ej:WNDCLASSEX LOCAL mJanela:HWND LOCAL malote:MSG mov ej.cbSize, SIZEOF WNDCLASSEX mov ej.style, CS_HREDRAW or CS_VREDRAW mov ej.lpfnWndProc, OFFSET gerenteMensagem mov ej.cbClsExtra, NULL mov ej.cbWndExtra, NULL push mInst pop ej.hInstance invoke LoadIcon, NULL, IDI_WINLOGO mov ej.hIcon, eax mov ej.hIconSm, eax invoke LoadCursor, NULL, IDC_ARROW mov ej.hCursor, eax mov ej.hbrBackground, COLOR_WINDOW+1 mov ej.lpszMenuName, NULL mov ej.lpszClassName, OFFSET NomeClasse invoke RegisterClassEx, ADDR ej invoke CreateWindowEx, NULL, ADDR NomeClasse, ADDR TituloJanela, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, mInst, NULL mov mJanela,eax invoke ShowWindow, mJanela, SW_SHOWNORMAL invoke UpdateWindow, mJanela .WHILE TRUE invoke GetMessage, ADDR malote, NULL, 0, 0 .BREAK .IF (eax < 1) invoke TranslateMessage, ADDR malote invoke DispatchMessage, ADDR malote .ENDW mov eax, malote.wParam ret gerenteJanela endp gerenteMensagem proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM .IF uMsg == WM_CREATE .ELSEIF uMsg == WM_SIZE .ELSEIF uMsg == WM_PAINT .ELSEIF uMsg == WM_COMMAND .ELSEIF uMsg == WM_CLOSE .ELSEIF uMsg==WM_DESTROY invoke PostQuitMessage, NULL xor eax,eax ret .ENDIF invoke DefWindowProc, hWnd, uMsg, wParam, lParam ret gerenteMensagem endp end inicio

Vamos mudar o título da janela para "NumaBoa com Recursos" só para identificá-la melhor:

.DATA NomeClasse db "JanelaNua",0 TituloJanela db "NumaBoa com Recursos",0

Como queremos que o gráfico seja mostrado assim que a janela aparecer na tela, precisamos gerenciar a mensagem WM_CREATE que é enviada ao gerenteMensagem assim que a janela é criada. Primeiramente vamos criar uma área dentro da janela principal onde o bitmap deve ser mostrado. Essa área especial nada mais é que um controle, ou seja, uma janela especial. Já sabemos que, para criar uma janela/controle, precisamos de uma classe registrada que servirá como modelo. No Windows existem classes predefinidas para controles: BUTTON, COMBOBOX, EDIT, LISTBOX, SCROLLBAR e STATIC. Usaremos a STATIC, por que não esperamos adicionar nenhuma funcionalidade ao nosso bitmap. A primeira provicência, então, é inicializar uma variável com o nome da classe na seção .DATA:

.DATA NomeClasse db "JanelaNua",0 TituloJanela db "Janelinha NumaBoa",0 ClasseAreaBMP db "STATIC",0

Informações adicionais