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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

Львівський Державний Інститут Новітніх Технологій та Управління ім. В.Чорновола

Факультет інформаційних технологій

Звіт по Лабораторній роботі №4

«стандартні класи вікон та їх типи»

з дисципліни

«Системне Програмування»

Виконав

Студент групи КІ-21

Денисюк В.В.

Перевірив

Зербіно Д.Д.

бал «____»

Львів-2010

Порядок виконання роботи

  1. Відкомпілювати подану програму.

  2. Замість стандартного класу 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.

  1. Описати вікна кожного класу та їх властивості.

Вікно класу «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»