Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Звіт по Лаб. №4.doc
Скачиваний:
4
Добавлен:
27.11.2019
Размер:
115.71 Кб
Скачать

Текст програми

CLASSNAME db 'Edit',0 ; Ім’я стандартного класу

Результат виконання програми

Вікно класу «ScrollBar»

Текст програми

.386

.model flat,STDCALL

extrn InitCommonControls:Proc

extrn GetModuleHandleA:Proc

extrn ExitProcess:Proc

extrn CreateWindowExA:Proc

extrn GetMessageA:Proc

extrn DispatchMessageA:Proc

extrn TranslateMessage:Proc

extrn SendMessageA:Proc

extrn SetScrollInfo:Proc

extrn RegisterClassA:Proc

extrn DefWindowProcA:Proc

extrn GetScrollPos:Proc

extrn _wsprintfA:Proc

extrn lstrlen:Proc

extrn GetDC:Proc

extrn ReleaseDC:Proc

extrn TextOutA:Proc

extrn SetScrollPos:Proc

extrn MessageBoxA:Proc

WM_CTLCOLORSCROLLBAR equ 137h

CS_PUBLICCLASS equ 4000h

WS_CHILD equ 40000000h

SB_ENDSCROLL equ 8

; Визначення тип_в (стил_в) в_кон:

WS_POPUP equ 80000000h

WS_VISIBLE equ 010000000h

WS_DLGFRAME equ 400000h

WS_EX_TOPMOST equ 8h

; Код пов_домлення про натиснуту клав_шу:

WM_KEYDOWN equ 100h

WM_HSCROLL equ 114h

WM_PARENTNOTIFY equ 210h

WS_HSCROLL equ 100000h

SIF_RANGE equ 0001h

SIF_PAGE equ 0002h

SIF_POS equ 0004h

;SIF_DISABLENOSCROLL equ 0008h

SIF_TRACKPOS equ 0010h

SB_CTL equ 2

.data

MSG: ; Структура стандартного пов_домлення WINDOWS

msHWND dd 0 ; хто над_слав

msMESSAGE dd 0 ; яку _нформац_ю

msWPARAM dd 0 ; про що

msLPARAM dd 0 ; _ як

msTIME dd 0 ; коли

ptX dd 0 ; де (X),

ptY dd 0 ; (Y)

NewHWnd dd 0

WindowCaption db 'стандартний клас в_кна',0

CLASSNAME db 'ScrollBar',0 ; _м'я стандартного класу

CLASSNAME_MAIN db "wikno1",0

SBM_SETPOS equ 0E0h

SCROLLINFO:

dd 7*4 ; UINT cbSize;

dd 31-8 ;SIF_ALL ; UINT fMask;

dd 0 ; int nMin;

dd 100+25-1 ; int nMax;

dd 25 ; UINT nPage;

dd 50 ; int nPos;

dd 30 ; int nTrackPos;

hWndMain dd 0

WNDCLASS:

clsStyle dd CS_PUBLICCLASS ; class style

clsLpfnWndProc dd offset PROC1

clsCbClsExtra dd 0

clsCbWndExtra dd 0

AppHWnd dd 0 ; instance handle

clsHIcon dd 0 ; class icon handle

clsHCursor dd 0 ; class cursor handle

clsHbrBackground dd 2 ; class background brush

clsLpszMenuName dd 0 ; menu name

clsLpszClassName dd offset CLASSNAME_MAIN ; far ptr to class name

SCROLL_POS dd 0

COORD_TEXT dd 0

LEN1 dd 0

FORMAT1 db "Позицiя скролiнгу: %ld ",0

TEXT1 db 200 dup(0)

;=======================================

.code

Start: call InitCommonControls

call GetModuleHandleA,0

mov AppHWnd,eax

call RegisterClassA,offset WNDCLASS

push 0 ; MDI-структура

push AppHWnd ; програмний модуль

push 0 ; меню

push 0 ; власник

push 330 ; висота

push 360 ; ширина

push 25 ; координата y

push 30 ; координата x

push WS_POPUP or WS_VISIBLE or WS_MINIMIZEBOX or\

WS_MAXIMIZEBOX or WS_CLIPCHILDREN or WS_THICKFRAME or\

WS_SYSMENU or WS_HSCROLL

push offset WindowCaption ; Заголовок в_кна

push offset CLASSNAME_MAIN ; _м'я класу в_кна

push WS_EX_TOPMOST ; Властивост_

call CreateWindowExA ; Створити в_кно

mov hWndMain,eax ; Зберегти хендл в_кна

WS_VISIBLE equ 10000000h

WS_CLIPSIBLINGS equ 4000000h

WS_CLIPCHILDREN equ 2000000h

WS_BORDER equ 800000h

WS_DLGFRAME equ 400000h

WS_SYSMENU equ 80000h

WS_THICKFRAME equ 40000h

WS_MINIMIZEBOX equ 20000h

WS_MAXIMIZEBOX equ 10000h

;=======================================

push 0 ; MDI-структура

push AppHWnd ; програмний модуль

push 0 ; меню

push hWndMain ; власник

push 30 ; висота

push 160 ; ширина

push 250 ; координата y

push 160 ; координата x

push WS_CHILD or WS_VISIBLE

push offset WindowCaption ; Заголовок в_кна

push offset CLASSNAME ; _м'я класу в_кна

push 0 ; Властивост_

call CreateWindowExA ; Створити в_кно

mov NewHWnd,eax ; Зберегти хендл в_кна

;=======================================

call SetScrollInfo,NewHWnd,SB_CTL,offset SCROLLINFO, 1

; call SendMessageA,NewHWnd,SBM_SETPOS,8,1

;=======================================

MSG_LOOP: ; Цикл прийому пов_домлень

call GetMessageA,offset MSG,0,0,0

cmp msMESSAGE,WM_KEYDOWN

jnz CONTINUE_LOOP

cmp msWPARAM,1bh ; код <ESC>

jz STOP

CONTINUE_LOOP:

call TranslateMessage,offset MSG

call DispatchMessageA,offset MSG ; конну процедуру.

jmp MSG_LOOP

STOP:

call ExitProcess,0

;*************************************************

PROC1 proc h1:dword, mes1:dword, wparam1:dword, lparam1:dword

cmp mes1,WM_HSCROLL

jnz NO_SCROLL

mov eax,wparam1

and eax,0ffh

cmp eax,SB_ENDSCROLL

jz M1

mov eax,wparam1

sar eax,16

mov SCROLL_POS,eax

M1:

cmp lparam1,0

jnz CONT1

mov COORD_TEXT,10

call SetScrollPos,hWndMain,0,SCROLL_POS,1

jmp CONT2

CONT1:

mov COORD_TEXT,30

call SetScrollPos,lparam1,SB_CTL,SCROLL_POS,1

CONT2:

call _wsprintfA,offset TEXT1,offset FORMAT1,SCROLL_POS

add esp,12

call lstrlen, offset TEXT1

mov LEN1,eax

call GetDC,h1

push eax ; параметр використовується в ReleaseDC

call TextOutA,eax,10,COORD_TEXT,offset TEXT1,LEN1

call ReleaseDC,h1

NO_SCROLL:

call DefWindowProcA,h1,mes1,wparam1, lparam1

ret

endp PROC1

End Start

Результат виконання програми

1)

2)

Вікно класу «SysIPAddress32»

Текст програми

CLASSNAME db ' SysIPAddress32',0 ; Ім’я стандартного класу

Результат виконання програми

Вікно класу «msctls_updown32»

Текст програми

CLASSNAME db ' msctls_updown32',0 ; Ім’я стандартного класу

Результат виконання програми

Вікно класу «msctls_trackbar32»

Текст програми

CLASSNAME db 'C msctls_trackbar32',0 ; Ім’я стандартного класу

Результат виконання програми

Вікно класу «msctls_hotkey32»

Текст програми

CLASSNAME db ' msctls_hotkey32',0 ; Ім’я стандартного класу

Результат виконання програми

Вікно класу «ListBox»

Текст програми

.386

.model flat,STDCALL

extrn GetModuleHandleA:Proc

extrn ExitProcess:Proc

extrn CreateWindowExA:Proc

extrn DispatchMessageA:Proc

extrn SendMessageA:Proc

extrn PeekMessageA:Proc

extrn TranslateMessage:Proc

WS_POPUP EQU 80000000h

WS_VISIBLE EQU 010000000h

WS_DLGFRAME EQU 400000h

WS_EX_TOPMOST equ 8h

WS_THICKFRAME equ 40000h

WM_KEYDOWN equ 100h

LB_ADDSTRING equ 180h

;CBS_DROPDOWN equ 2h

LBS_HASSTRINGS equ 40h

LBS_SORT equ 2h

PM_REMOVE equ 1h

;===============================================================

.data

msg: ; структура повiдомлення

msHWND dd 0

msMESSAGE dd 0

msWPARAM dd 0

msLPARAM dd 0

msTIME dd 0

ptX dd 0

ptY dd 0

AppHWnd dd 0 ; хендл завантаженої програми

NewHWnd dd 0 ; хендл кнопки

CLASSNAME db 'ListBox',0

STR1 db "Лабораторна №4",0

STR2 db "Денисюк Вячеслав",0

;================================================================

.code

Start:

push 0h

call GetModuleHandleA

mov AppHWnd,eax

push 0

push AppHWnd ; hInstance

push 0 ; menu

push 0 ; parent hwnd

push 60 ; розмiр по вертикалi

push 100 ; розмiр по горизонталi

push 250 ; координата y

push 300 ; координата x

push WS_POPUP or WS_VISIBLE or WS_DLGFRAME or LBS_SORT or LBS_HASSTRINGS or

WS_THICKFRAME

push 0 ; назва вiкна

push offset CLASSNAME

push WS_EX_TOPMOST ; поверх всiх вiкон

call CreateWindowExA

mov NewHWnd,eax

call SendMessageA,NewHWnd,LB_ADDSTRING,0,offset STR1

call SendMessageA,NewHWnd,LB_ADDSTRING,0,offset STR2

;====================================================

MSG_LOOP:

call PeekMessageA,offset msg,NewHWnd, 0h,0, PM_REMOVE

or eax,eax

jnz MESS_OK

call PeekMessageA,offset msg,0, 201h,202h, PM_REMOVE

or eax,eax

jz MSG_LOOP

MESS_OK:

cmp msMESSAGE,WM_KEYDOWN ; якщо це повiдомлення про натиснену клавiшу,

jnz CONTINUE_LOOP

cmp msWPARAM,1bh ; якщо її код = <ESC>, то STOP

jz STOP

CONTINUE_LOOP:

call TranslateMessage,offset msg

call DispatchMessageA,offset msg ; обробити повiдомлення

jmp MSG_LOOP

;==============================

STOP:

push 0

call ExitProcess

End Start

Результат виконання програми