Сборник по задачам и примерам Assembler



Реализация рекурсивных процедур - часть 3


Вызов функции DrawPattern_1 из основной программы осуществляется следующим фрагментом кода (полный текст приведен в в каталоге программ для данной главы).

:prg3_1.asm - фрагмент оконного приложения, вызывающего рекурсивную процедуру :DrawPattern_l

объявление пользовательских процедур (из maket_dll.DLL) extrn DrawPattern_l:PROC extrn DrawPattem_2:PR0C

.data

определение констант для фигуры "Узор из окружностей"

р dd 5 ;порядок узора

г dd 60 :радиус окружности

y_Pdd 140 начальная у-координата центра окружности

х_Р dd 200 начальная х-координата центра окружности

.code

обработка сообщений от меню

MenuProc proc

arg (a@hwnd: DWORD. №wparam: DWORD, @(ahdc: DWORD.@@hbrush: DWORD

uses eax.ebx

mov ebx.@@wparam :в Ьх идентификатор меню

onpbx.IDMJ)LL_LACESJ je @@idmdlllaces_l cmpbx.IDM_DLLJ_ACES_2 je @@idmdlllaces_2 jmp@@exit

e@1 chndl 11 aces_l:

;рисуем узор из окружностей, рекурсивная функция для рисования находится

;в DLL-библиотеке:

;DrawPattern_l(hwnd.hdc,x.y.r.p) - функция не работает с локальными переменными:

push p :порядок узора

push г :радиус окружности

push y_P :у-координата центра окружности

push x_P ;х-координата центра окружности

push memdc :контекст устройства

push @@hwnd

call DrawPattern_l

jmp@@exit :.........

Фрагмент файла maket_dll.DLL, содержащий процедуру DrawPattern_l, приведен ниже:

iinaket_dn.DLL - фрагмент DLL-библиотеки, содержащей рекурсивную процедуру DrawPatternJ

объявление процедур DLL-библиотеки общедоступными publicdll WriteCon publicdll DrawPatternJ publicdll DrawPattern_2

.code DrawPatternJ proc

:DrawPattern_l - рекурсивная процедура рисования узора :(без использования локальных переменных)

arg @@hwnd:dword.@@hdc:dword.@@x:dword.@@y:dword.@@r:dword.@@p:dword

:рисуем окружность

:рекурсивно вызываем DrawPattern_l(hwnd.hdc,x.y.r,p)

:BOOL Ellipse(HDC hdc. int nLeftRect. int nTopRect. int nRightRect.int nBottomRect):

:готовим параметры в стеке для вызова Ellipse

call Ellipse:рисуем окружность :и еще четыре меньшего порядка




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