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

Abre-te Sésamo (masm)

Ter

21

Abr

2009


17:03

(7 votos, média 4.86 de 5) 


Interceptando a mensagem do menu

Já sabemos que mensagens de menu são do tipo WM_COMMAND e que podem ser interceptadas pelo gerenteMensagem:

... gerenteMensagem proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM ... .ELSEIF uMsg == WM_COMMAND mov eax, wParam .IF ax == IDM_abrir ... // Aqui entra o código da Open Dialog Box .ELSE ...

Criando a estrutura OPENFILENAME

Se o item de menu "Abrir" for selecionado, precisamos ter à disposição uma estrutura OPENFILENAME declarada para poder inicializá-la. Só depois disso é que poderemos criar a Open Dialog Box. Analisando os membros da estrutura, fica evidente que vamos precisar de uma string de filtro, um buffer para guardar o arquivo selecionado e do tamanho do buffer.

.CONST ... TamBuffer equ 256 .DATA ... ofn OPENFILENAME <> StringFiltro db "Todos (*.*)", 0, "*.*", 0 db "Arquivos Texto (*.txt)", 0, "*.txt", 0, 0 Buffer db TamBuff dup (0) .CODE ... gerenteMensagem proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM ... .ELSEIF uMsg == WM_COMMAND mov eax, wParam .IF ax == IDM_abrir mov ofn.lStructureSize, SIZEOF ofn push hWnd pop ofn.hWndOwner push mInstancia pop ofn.hInstance mov ofn.lpstrFilter, OFFSET StringFiltro mov ofn.lpstrFile, OFFSET Buffer mov ofn.nMaxFile, TamBuff mov ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY ... .ELSE ... .ENDIF .ELSE // usuário escolheu item de menu "Sair" INVOKE DestroyWindow, hWnd .ENDIF ...

Analisando a seleção do usuário

Tendo inicializado a estrutura OPENFILENAME, agora é possível criar a janela de diálogo padrão para a abertura de arquivos. Assim que o usuário fizer a sua escolha, analisaremos os valores de retorno e os apresentaremos numa caixa de mensagens. Novamente precisaremos de alguns dados adicionais: um buffer para as strings que serão apresentadas, o tamanho deste buffer, os textos padrão para o nome do arquivo selecionado e o título da caixa de mensagem. A concatenação das strings padrão com as strings da seleção pode ser obtida através da função lstrcat:

LPTSTR lstrcat( LPTSTR lpString1, // endereço do buffer para as strings concatenadas LPCTSTR lpString2 // endereço da string que deve ser adicionada à string1 ); .CONST ... TamBuffer equ 256 TamResp equ 512 .DATA ... ofn OPENFILENAME <> StringFiltro db "Todos (*.*)", 0, "*.*", 0 db "Arquivos Texto (*.txt)", 0, "*.txt", 0, 0 Buffer db TamBuff dup (0) BuffResp db TamResp dup (0) NomeCompleto db "O nome completo do arquivo é: ", 0 NomeArq db "O nome do arquivo é: ", 0 NomeExt db "A extensão do arquivo é: ", 0 QuebraDeLinha db 0Dh, 0Ah, 0 TituloResp db "Você selecionou", 0 ... gerenteMensagem proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM ... .ELSEIF uMsg == WM_COMMAND ... .IF ax == IDM_abrir ... INVOKE GetOpenFileName, ADDR ofn .IF eax == TRUE INVOKE lstrcat, OFFSET BuffResp, OFFSET NomeCompleto ; põe "O nome completo do arquivo é: " no buffer INVOKE lstrcat, OFFSET BuffResp, ofn.lpstrFile ; concatena com o ; nome e caminho do arquivo escolhido INVOKE lstrcat, OFFSET BuffResp, OFFSET QuebraDeLinha ; concatena com uma quebra de linha INVOKE lstrcat, OFFSET BuffResp, OFFSET NomeArq ; concatena com "O nome do arquivo é: " mov eax, ofn.lpstrFile ; põe o ponteiro para o nome com caminho ; no registrador eax push ebx ; põe valor de ebx na pilha, preservando-o xor ebx, ebx ; zera ebx mov bx, ofn.nFileOffset ; põe a posição do ; primeiro caracter do nome do arquivo ; no registrador ebx add eax, ebx ; avança o ponteiro para apontar o início do ; nome do arquivo pop ebx ; restaura o valor original de ebx INVOKE lstrcat, OFFSET BuffResp, eax ; concatena com o nome do arquivo INVOKE lstrcat, OFFSET BuffResp, OFFSET QuebraDeLinha ; concatena mais uma quebra de linha INVOKE lstrcat, OFFSET BuffResp, OFFSET NomeExt ; concatena "A extensão do arquivo é: " mov eax, ofn.lpstrFile ; ponteiro para o nome com caminho em eax push ebx ; preserva o valor de ebx xor ebx, ebx ; zera ebx mov bx, ofn.nFileExtension ; põe a posição do primeiro caracter da extensão ; do arquivo no registrador ebx add eax, ebx ; avança o ponteiro para apontar o início ; da extensão do arquivo pop ebx ; restaura o valor original de ebx INVOKE lstrcat, OFFSET BuffResp, eax ; concatena com a extensão do arquivo INVOKE MessageBox, hWnd, OFFSET BuffResp, ADDR TituloResp, MB_OK ; mostra o resultado INVOKE RtlZeroMemory, OFFSET BuffResp, TamResp ; limpa o buffer de strings de resposta .ENDIF .ELSE ...

Finalmentes

O pequeno aplicativo tem este jeitão:

Sésamo

Você pode fazer o download do tutorial nos Downloads da Aldeia em Tutoriais / Assembly Numaboa.

игровые автоматы вулкан онлайн играть бесплатносковородка вок купитьофициальный никас сайт владимир пасторкисти Dark Chocolatesобстановка в харькове 26 февраляwobs

Informações adicionais