
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Львівський Державний Інститут Новітніх Технологій та Управління ім. В.Чорновола
Факультет інформаційних технологій
Звіт по Лабораторній роботі №4
«стандартні класи вікон та їх типи»
з дисципліни
«Системне Програмування»
Виконав
Студент групи КІ-21
Денисюк В.В.
Перевірив
Зербіно Д.Д.
бал «____»
Львів-2010
Порядок виконання роботи
Відкомпілювати подану програму.
Замість стандартного класу Button ввести наступні назви класів:
ComboBox, Edit, ListBox, Message, ScrollBar, Static, SysAnimate32, SysHeader32, SysListView32, SysTabControl32, SysTreeView32, TTSubclass, ToolTips, ToolbarWindow32, msctls_hotkey32, msctls_progress32, msctls_statusbar32, msctls_trackbar32, msctls_updown32, tooltips_class32, #32768, #32769, #32770, #32771, ComboBoxEx32, SysPager, SysIPAddress32, NativeFontCtl.
Описати вікна кожного класу та їх властивості.
Вікно класу «Button»
Текст програми
.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
; Визначення типів (стилів) вікон:
WS_POPUP equ 80000000h
WS_VISIBLE equ 010000000h
WS_DLGFRAME equ 400000h
WS_EX_TOPMOST equ 8h
; Код повідомлення про натиснуту клавішу:
WM_KEYDOWN equ 100h
BS_AUTOCHECKBOX equ 3h
WS_THICKFRAME equ 40000h
.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)
AppHWnd dd 0
NewHWnd dd 0
WindowCaption db "Денисюк В.В.",0
CLASSNAME db 'Button',0 ; Ім’я стандартного класу
;=======================================
.code
Start: call InitCommonControls
push 0h
call GetModuleHandleA
mov AppHWnd,eax
push 0 ; MDI-структура
push AppHWnd ; програмний модуль
push 0 ; меню
push 0 ; власник
push 100 ; висота
push 160 ; ширина
push 250 ; координата y
push 300 ; координата x
push WS_POPUP or WS_VISIBLE or BS_AUTOCHECKBOX or WS_THICKFRAME
push offset WindowCaption ; Заголовок вікна
push offset CLASSNAME ; Ім’я класу вікна
push WS_EX_TOPMOST ; Властивості
call CreateWindowExA ; Створити вікно
mov NewHWnd,eax ; Зберегти хендл вікна
;=======================================
MSG_LOOP: ; Цикл прийому повідомлень
push 0 ; діапазон прийому -
push 0 ; всі можливі повідомлення
push NewHWnd ; від даного вікна
push offset MSG ; Адреса структури повідомлення
call GetMessageA
cmp msMESSAGE,WM_KEYDOWN
jnz CONTINUE_LOOP
cmp msWPARAM,1bh ; код <ESC>
jz STOP
CONTINUE_LOOP:
push offset MSG
call TranslateMessage
push offset MSG ; Направити повідомлення у ві-
call DispatchMessageA ; конну процедуру.
jmp MSG_LOOP
;==============================
STOP:
push 0
call ExitProcess
End Start
Результат виконання завдання
Вікно класу «ComboBox»
Текст програми
.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
WM_KEYDOWN equ 100h
CB_ADDSTRING equ 143h
CBS_DROPDOWN equ 2h
CBS_HASSTRINGS equ 200h
CBS_SORT equ 100h
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 'ComboBox',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 CBS_SORT or CBS_DROPDOWN or CBS_HASSTRINGS
push 0 ; назва вiкна
push offset CLASSNAME
push WS_EX_TOPMOST ; поверх всiх вiкон
call CreateWindowExA
mov NewHWnd,eax
call SendMessageA,NewHWnd,CB_ADDSTRING,0,offset STR1
call SendMessageA,NewHWnd,CB_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
Результат виконання програми
Вікно класу «Edit»