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



         

В данном разделе мы рассмотрим весьма интересный вопрос о всплывающих подсказках - часть 5


;--------------------------------------------- ; процедура таймера ; расположение параметров в стеке ; [EBP+014Н] ; LPARAM - промежуток запуска Windows ; [EBP+10Н] ; WAPARAM - идентификатор таймера ; [EBP+0CH] ; WM_TIMER ; [EBP+8] ; HWND TIMPROC PROC PUSH EBP MOV EBP,ESP ; получить положение курсора PUSH OFFSET PT CALL GetCursorPos@4 ; запомнить координаты MOV EAX,PT.X MOV XX,EAX MOV EAX,PT.Y MOV YY,EAX ; получить положение элементов ; окно редактирования PUSH 1 PUSH DWORD PTR [EBP+08H] CALL GetDlgItem@8 PUSH OFFSET R1 PUSH EAX CALL GetWindowRect@8 ; кнопка выхода PUSH 2 PUSH DWORD PTR [EBP+08H] CALL GetDlgItem@8 PUSH OFFSET R2 PUSH EAX CALL GetWindowRect@8 ; увеличить счетчик INC P1 MOV ECX,XX MOV EDX,YY ; проверка условий .IF H1==0 && P1>5 .IF EDX<=R1.B && EDX>=R1.T && ECX>=R1.L && ECX<=R1.R ; подготовить строку PUSH OFFSET HINT1 PUSH OFFSET HINTS CALL lstrcpyA@8 ; создать диалоговое окно - подсказку PUSH 0 PUSH OFFSET HINT PUSH DWORD PTR [EBP+08H] PUSH OFFSET HIN PUSH [HINST] CALL CreateDialogParamA@20 MOV H1,EAX ; установить фокус PUSH DWORD PTR [EBP+08H] CALL SetFocus@4 ; обнулить счетчик MOV P1,0 JMP _END .ENDIF .ENDIF .IF H1!=0 .IF (EDX>R1.B || EDX<R1.T) || (ECX<R1.L || ECX>R1.R) ; удаление подсказки в связи с перемещением курсора PUSH H1 CALL DestroyWindow@4 MOV H1,0 JMP _END .ENDIF .ENDIF .IF H2==0 && P1>5 .IF EDX<=R2.B && EDX>=R2.T && ECX>=R2.L && ECX<=R2.R ; подготовить строку PUSH OFFSET HINT2 PUSH OFFSET HINTS CALL lstrcpyA@8 ; создать диалоговое окно - подсказку PUSH 0 PUSH OFFSET HINT PUSH DWORD PTR [EBP+08H] PUSH OFFSET HIN PUSH [HINST] CALL CreateDialogParamA@20 MOV H2,EAX ; установить фокус PUSH DWORD PTR [EBP+08H] CALL SetFocus@4 ; обнулить счетчик MOV P1,0 JMP _END .ENDIF .ENDIF .IF H2!=0 .IF (EDX>R2.B || EDX<R2.T) || (ECX<R2.L || ECX>R2.R) ;удаление подсказки в связи с перемещением курсора PUSH H2 CALL DestroyWindow@4 MOV H2,0 JMP _END .ENDIF .ENDIF ; восстановить стек _END: POP EBP RET 16 TIMPROC ENDP




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