Ассемблер для Windows



         

Итак продолжим рассматривать ресурсы - часть 4


; сегмент кода _TEXT SEGMENT DWORD PUBLIC USE32 'CODE' START: ; получить дескриптор приложения PUSH 0 CALL GetModuleHandleA@4 MOV [HINST], EAX ;---------------------------------------- PUSH 0 PUSH OFFSET WNDPROC PUSH 0 PUSH OFFSET PA PUSH [HINST] CALL DialogBoxParamA@20 CMP EAX,-1 JNE KOL KOL: ;---------------------------------------- PUSH 0 CALL ExitProcess@4 ;---------------------------------------- ; процедура окна ; расположение параметров в стеке ; [EBP+014Н] ; LPARAM ; [EBP+10H] ; WAPARAM ; [EBP+0CH] ; MES ; [EBP+8] ; HWND WNDPROC PROC PUSH EBP MOV EBP,ESP PUSH EBX PUSH ESI PUSH EDI ;---------------------------------------- CMP DWORD PTR [EBP+0CH], WM_CLOSE JNE L1 PUSH 0 PUSH DWORD PTR [EBP+08H] CALL EndDialog@8 MOV EAX, 1 JMP FIN L1: CMP DWORD PTR [EBP+0CH],WM_INITDIALOG JNE L2 ; здесь заполнить окна редактирования, если надо ; ; MOV EAX, 1 JMP FIN L2: CMP DWORD PTR [EBP+0CH],WM_COMMAND JNE L5 ; кнопка выхода ? CMP WORD PTR [EBP+10H], 5 JNE L3 PUSH 0 PUSH DWORD PTR [EBP+08H] CALL EndDialog@8 MOV EAX, 1 JMP FIN L3: CMP WORD PTR [EBP+10H], 1 JNE FINISH ; блок обработки сообщений первого окна редактирования CMP WORD PTR [EBP+12H], EN_KILLFOCUS JNE L4 ; окно редактирования с идентификатором 1 теряет фокус MOV EBX, 0 ; снимаем все горячие клавиши L33: MOVZX EAX,BYTE PTR [ТАВ+EBX] PUSH EAX PUSH DWORD PTR [EBP+08Н] CALL UnregisterHotKey@8 INC EBX CMP EBX, 214 JNE L33 MOV EAX, 1 JMP FIN L4: CMP WORD PTR [EBP+12H],EN_SETFOCUS JNE FINISH ; окно редактирования с идентификатором 1 получает фокус MOV EBX, 0 ; устанавливаем горячие клавиши L44: MOVZX EAX,BYTE PTR [ТАВ+EBX] PUSH EAX PUSH 0 PUSH EAX PUSH DWORD PTR [EBP+08Н] CALL RegisterHotKey@16 INC EBX CMP EBX, 214 JNE L44 MOV EAX, 1 JMP FIN L5: CMP DWORD PTR [EBP+0CH],WM_HOTKEY JNE FINISH ; здесь реакция на неправильно введенный символ PUSH 0 ; МВ_ОК PUSH OFFSET STR2 PUSH OFFSET STR1 PUSH DWORD PTR [EBP+08Н] ; дескриптор окна CALL MessageBoxA@16 FINISH: MOV EAX, 0 FIN: POP EDI POP ESI POP EBX POP EBP RET 16 WNDPROC ENDP _TEXT ENDS END START




Содержание  Назад  Вперед