Читаем Assembler & Win32 полностью

       call   UpdateWindow,       [hWnd]              ; redraw window


IFDEF  VER3

       call   LoadMenuA,          [hInst], MyMenu

       mov    [hMenu],eax

       call   SetMenu,            [hWnd], eax

ENDIF


msg_loop:

       call   GetMessageA,        offset msg, 0, 0, 0

       or     ax,ax

       jz     exit

       call   TranslateMessage,   offset msg

       call   DispatchMessageA,   offset msg

       jmp    msg_loop

exit:  call   ExitProcess,        0


public stdcall      WndProc

proc   WndProc      stdcall

arg    @@hwnd:      dword, @@msg: dword, @@wPar:      dword, @@lPar:      dword

       mov    eax,[@@msg]

       cmp    eax,WM_COMMAND

       je     @@command

       cmp    eax,WM_DESTROY

       jne    @@default

       call   PostQuitMessage,    0

       xor    eax,eax

       jmp    @@ret

@@default:

       call   DefWindowProcA,     [@@hwnd], [@@msg], [@@wPar], [@@lPar]

@@ret: ret

@@command:

       mov    eax,[@@wPar]

       cmp    eax,ID_OPEN

       je     @@open

       cmp    eax,ID_SAVE

       je     @@save

       call   SendMessageA,       [@@hwnd], WM_CLOSE, 0, 0

       xor    eax,eax

       jmp    @@ret

@@open:      mov    eax, offset msg_open_txt

       mov    edx, offset msg_open_tlt

       jmp    @@mess

@@save:      mov    eax, offset msg_save_txt

       mov    edx, offset msg_save_tlt

@@mess:      call   MessageBoxA,        0, eax, edx, MB_OK

       xor    eax,eax

       jmp    @@ret

endp   WndProc

end    Start

Комментарии к программе

Здесь мне хотелось в первую очередь продемонстрировать использование прототипов функций API Win32. Конечно их (а также описание констант и структур из API Win32) следует вынести в отдельные подключаемые файлы, поскольку, скорее всего Вы будете использовать их и в других программах. Описание прототипов функций обеспечивает строгий контроль со стороны компилятора за количеством и типом параметров, передаваемых в функции. Это существенно облегчает жизнь программисту, позволяя избежать ошибок времени исполнения, тем более, что число параметров в некоторых функциях API Win32 весьма значительно.

Существо данной программы заключается в демонстрации вариантов работы с оконным меню. Программу можно откомпилировать в трёх вариантах (версиях), указывая компилятору ключи VER2 или VER3 (по умолчанию используется ключ VER1). В первом варианте программы меню определяется на уровне класса окна и все окна данного класса будут иметь аналогичное меню. Во втором варианте, меню определяется при создании окна, как параметр функции CreateWindowEx. Класс окна не имеет меню и в данном случае, каждое окно этого класса может иметь своё собственное меню. Наконец, в третьем варианте, меню загружается после создания окна. Данный вариант показывает, как можно связать меню с уже созданным окном.

Директивы условной компиляции позволяют включить все варианты в текст одной и той же программы. Подобная техника удобна не только для демонстрации, но и для отладки. Например, когда Вам требуется включить в программу новый фрагмент кода, то Вы можете применить данную технику, дабы не потерять функционирующий модуль. Ну, и конечно, применение директив условной компиляции – наиболее удобное средство тестирования различных решений (алгоритмов) на одном модуле.

Представляет определённый интерес использование стековых фреймов и заполнение структур в стеке посредством регистра указателя стека (esp). Именно это продемонстрировано при заполнении структуры WndClassEx. Выделение места в стеке (фрейма) делается простым перемещением esp:

       sub    esp,SIZE WndClassEx

Перейти на страницу:

Похожие книги

Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

Данная книга посвящена программированию игр с помощью ActionScript. Здесь вы найдете подробные указания, необходимые для создания самых разных игр – аркад, головоломок, загадок и даже игровых автоматов. В тексте приведены исходные коды программ и детальные, доступно изложенные инструкции. Базовые принципы программирования ActionScript рассматриваются на примере игр, однако вы без труда сможете применить полученные знания и для разработки неигровых проектов, таких как Web-дизайн и реклама. Рекомендации Гэри Розенцвейга помогут вам не только придумывать занимательные игры и размещать их на Web-сайте, но и оптимизировать скорость их работы, а также защищать свои творения от несанкционированного копирования. Представленный в книге код несложно изменить для использования в других программах.Книга предназначена для широкого круга читателей – создателей анимационных роликов, художников-оформителей, программистов и разработчиков Web-сайтов. Издание может также выступать в качестве практического пособия по изучению ActionScript.

Гэри Розенцвейг

Программирование, программы, базы данных / Программирование / Книги по IT