Текст програми
…
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
Результат виконання програми
