Программа демонстрирующая иерархию окон 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

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-04-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: