Программа демонстрирующая иерархию окон Windows »
p386; эта директива разрешает транслятору обрабатывать команды процессора i 386 jumps;транслятор автоматически преобразует команду условной передачи управления ;в комбинацию условной и безусловной команды, если условная в силу ограниченности ;области своего действия не обеспечивает передачу управления по нужному адресу model flat,STDCALL;выбирает модель памяти для 32-разрядного программирования и ;правила передачи параметров функции STDCALL, далее действующие по умолчанию UNICODE = 0 include win32.inc;файл, содержащий описание структур данных и констант ; some 32-bit constants and structures L equ <LARGE>; последовательности символов LARGE, являющейся именем операции, объявляющей следующий за ней операнд 32-разрядным, присваивается имя L Define the external functions we will be linking to ; extrn BeginPaint:PROC;описание импортируемых из Windows функций extrn CreateWindowExA:PROC extrn DefWindowProcA:PROC extrn DispatchMessageA:PROC extrn EndPaint:PROC extrn ExitProcess:PROC extrn GetMessageA:PROC extrn GetModuleHandleA:PROC extrn GetStockObject:PROC extrn InvalidateRect:PROC extrn LoadCursorA:PROC extrn LoadIconA:PROC extrn MessageBeep:PROC extrn MessageBoxA:PROC extrn PostQuitMessage:PROC extrn RegisterClassA:PROC extrn ShowWindow:PROC extrn SetWindowPos:PROC extrn TextOutA:PROC extrn TranslateMessage:PROC extrn UpdateWindow:PROC extrn FindFirstFileA:PROC .data;предопределенное имя, означающее начало сегмента данных newhwnd dd 0 lppaint PAINTSTRUCT <?> msg MSGSTRUCT <?> wc WNDCLASS <?> hInst dd 0 szTitleName db 'Это окно УГТУ',0 szTitleName1 db 'Это окно группы СП-923',0 ;'Каркасное приложение Win32 на ассемблере'.0 szClassName db 'ASMCLASS32',0 ;'Приложение Win32’ Buffer db 'Привет из Нягани!',0 new1hwnd dd 0 MSG_L EQU 14 .code start: push L 0 call GetModuleHandleA ; get hmod (in eax) mov [hInst], eax ; hInstance is same as HMODULE ; in the Win32 world reg_class: ; ; initialize the WndClass structure ;Иинициализация сруктуры WndClass ; mov [wc.clsStyle], CS_HREDRAW + CS_VREDRAW + CS_GLOBALCLASS;тип ;класса mov [wc.clsLpfnWndProc], offset WndProc; адрес оконной процедуры mov [wc.clsCbClsExtra], 0 mov [wc.clsCbWndExtra], 0 mov eax, [hInst] mov [wc.clsHInstance], eax ;дикриптор модуля push L IDI_APPLICATION;заданная по умолчанию пиктограмма push L 0 call LoadIconA mov [wc.clsHIcon], eax push L IDC_ARROW push L 0 call LoadCursorA mov [wc.clsHCursor], eax mov [wc.clsHbrBackground], COLOR_WINDOW + 1 mov dword ptr [wc.clsLpszMenuName], 0 mov dword ptr [wc.clsLpszClassName], offset szClassName push offset wc call RegisterClassA push L 0 ; lpParam push [hInst] ; hInstance push L 0 ; menu push L 0 ; parent hwnd push L CW_USEDEFAULT ; height push L CW_USEDEFAULT ; width push L CW_USEDEFAULT ; y push L CW_USEDEFAULT ; x push L WS_OVERLAPPEDWINDOW ; Style push offset szTitleName ; Title string push offset szClassName ; Class name;имя класса push L 0 ; extra style call CreateWindowExA mov [newhwnd], eax push L SW_SHOWNORMAL push [newhwnd] call ShowWindow push [newhwnd]
call UpdateWindow push L 0 ; lpParam push [hInst] ; hInstance push L 0 ; menu push L [newhwnd] ; parent hwnd push L CW_USEDEFAULT ; height push L CW_USEDEFAULT ; width push L CW_USEDEFAULT ; y push L CW_USEDEFAULT ; x push L WS_OVERLAPPEDWINDOW ; Style push offset szTitleName1 ; Title string push offset szClassName ; Class name push L 0 ; extra style call CreateWindowExA mov [new1hwnd], eax push L SW_SHOWNORMAL push [new1hwnd] call ShowWindow push [new1hwnd] call UpdateWindow msg_loop: push L 0 push L 0 push L 0 push offset msg call GetMessageA cmp ax, 0 je end_loop push offset msg call TranslateMessage push offset msg call DispatchMessageA jmp msg_loop end_loop: push [msg.msWPARAM] call ExitProcess ; we never get to here ;оконная процедура ;----------------------------------------------------------------------------- WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD,\ wparam:DWORD, lparam:DWORD ; ; WARNING: Win32 requires that EBX, EDI, and ESI be preserved! We comply ; with this by listing those regs after the 'uses' statement in the 'proc'
; line. This allows the Assembler to save them for us. ; LOCAL hDC:DWORD cmp [wmsg], WM_DESTROY je wmdestroy cmp [wmsg], WM_SIZE je wmsize cmp [wmsg], WM_CREATE je wmcreate cmp [wmsg],WM_PAINT je wmpaint jmp defwndproc wmcreate: mov eax, 0 jmp finish defwndproc: push [lparam] push [wparam] push [wmsg] push [hwnd] call DefWindowProcA jmp finish wmdestroy: push L 0 call PostQuitMessage mov eax, 0 jmp finish wmsize: mov eax, 0 jmp finish wmpaint: push offset lppaint push [hwnd] call BeginPaint mov [hDC],eax push L 17 ; push ecx push offset Buffer push L 5 push L 5 push [hDC] call TextOutA push offset lppaint push [hwnd] call EndPaint
mov eax,0 jmp finish finish: ret WndProc endp ;----------------------------------------------------------------------------- public WndProc end start
Библиографический список
1. Использование Turbo Assembler при разработке программ / Составитель А.А. Чекатков. Киев: Диалектика, 1995. 2. Рихтер Д. Windows для профессионалов ( программирование в Win32 API для Windows NT 3.5 и Windows 95) пер. С англ. М.: Издательский отдел «Русский Редакция» ТОО «Channel Trading Ltd», 1995. 3. Зубков С.В. Assembler. Для DOS, Windows и Unix. М. : ДМК. 1999.
Популярное: Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Почему стероиды повышают давление?: Основных причин три... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (214)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |