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



         

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


; процедура окна всплывающей подсказки HINT PROC PUSH EBP MOV EBP,ESP CMP DWORD PTR [EBP+0CH],WM_INITDIALOG JNE NO_INIT ; инициализация ; получить контекст PUSH DWORD PTR [EBP+08H] CALL GetDC@4 MOV DC,EAX ; получить длину строки PUSH OFFSET HINTS CALL lstrlenA@4 ; получить длину и ширину строки PUSH OFFSET S PUSH EAX PUSH OFFSET HINTS PUSH DC CALL GetTextExtentPoint32A@16 ; установить положение и размер окна-подсказки PUSH 0 PUSH S.Y ADD S.X,2 PUSH S.X SUB YY,20 PUSH YY ADD XX,10 PUSH XX PUSH DWORD PTR [EBP+08H] CALL MoveWindow@24 ; закрыть контекст PUSH DC PUSH DWORD PTR [EBP+08H] CALL ReleaseDC@8 ; установить таймер PUSH 0 PUSH 6000 ; интервал 6 с. PUSH 3 ; идентификатор таймера PUSH DWORD PTR [EBP+08H] CALL SetTimer@16 JMP FIN NO_INIT: CMP DWORD PTR [EBP+0CH],WM_PAINT JNE NO_PAINT ; перерисовка окна ; получить контекст PUSH OFFSET PS PUSH DWORD PTR [EBP+08H] CALL BeginPaint@8 MOV DC,EAX ; установить цвета фона и текста подсказки PUSH RGBB PUSH EAX CALL SetBkColor@8 PUSH RGBT PUSH DC CALL SetTextColor@8 ; вывести текст PUSH OFFSET HINTS CALL lstrlenA@4 PUSH EAX PUSH OFFSET HINTS PUSH 0 PUSH 0 PUSH DC CALL TextOutA@20 ; закрыть контекст PUSH OFFSET PS PUSH DWORD PTR [EBP+08H] CALL EndPaint@8 JMP FIN NO_PAINT: CMP DWORD PTR [EBP+0CH],WM_TIMER JNE FIN ; обработка события таймера ; удалить таймер и удалить диалоговое окно ; подсказка удаляется в связи с истечением срока 6 с. PUSH 3 PUSH DWORD PTR [EBP+08H] CALL KillTimer@8 PUSH DWORD PTR [EBP+08H] CALL DestroyWindow@4 FIN: POP EBP RET 16 HINT ENDP _TEXT ENDS END START




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