Звіт

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра автоматизованих систем управління

Інформація про роботу

Рік:
2011
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування та операційні системи
Група:
КН-21

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти та науки України Національний університет “Львівська політехніка” Кафедра автоматизованих систем управління  Звіт з предмету “Системне програмування і операційні системи” з лабораторної роботи №5 Підготував: студент групи КН-21 Славич Юрій Перевірила: Павлюк О.М. Львів - 2011 Лабораторна робота №5 Тема – Дочірні вікна: їх утворення та взаємодія, графічний контекст. Мета – Навчитись будувати ієрархічну структуру вікон та працювати з ними. Теоретичні відомості InitCommonControls функція гарантує, що завантажений спільним контролем динамічну бібліотеку (DLL). Пустота InitCommonControls (void); GetModuleHandle повертає модуля ручку для вказаний модуль, якщо файл був відображаються в адресному просторі викликає процесу. HMODULE GetModuleHandle LPCTSTR lpModuleName / / адреса імені модуля, щоб повернутися ручка для ExitProcess завершує процес і всі його потоки. VOID ExitProcess UINT uExitCode / / код виходу для всіх потоків CreateWindowEx створює перекриваються, спливаюче або дочірнє вікно з розширеною стилю, в іншому випадку ця функція збігається з функцією CreateWindow. Для отримання додаткової інформації про створення вікна та повні описи інших параметрів CreateWindowEx см. CreateWindow. HWND CreateWindowEx DwExStyle DWORD, / / Extended стиль вікна LPCTSTR lpClassName, / / вказівник на ім'я класу зареєстровано LPCTSTR lpWindowName, / / вказівник на ім'я вікна DwStyle DWORD, / / стиль вікна Int X, / / горизонтальне положення вікна Int Y, / / вертикальне положення вікна Int nWidth, / / Ширина вікна Int nHeight, / / висота вікна HWndParent HWND, / / дескриптор з батьків або власника вікна HMENU HMenu, / / дескриптор меню, або дитину-вікна ідентифікатора HINSTANCE HINSTANCE, / / дескриптор екземпляра програми LPVOID lpParam / / покажчик на вікно даних для створення RegisterClass регістри функцій класу вікна для подальшого використання при дзвінках на CreateWindow або CreateWindowEx функції. RegisterClass функція була замінена функцією RegisterClassEx. Ви все ще можете використовувати RegisterClass, проте, якщо вам не потрібно встановити клас маленький значок. ATOM RegisterClass ( CONST WNDCLASS / / адресу структури з даними класу GetMessage отримує повідомлення з викликає черги повідомлень потоку і поміщає його в зазначеній структурі. Ця функція може стати і повідомлення, пов'язані із зазначеною вікна і потік повідомлень, відправлених через PostThreadMessage функції. Функція повертає повідомлення, які знаходяться в межах зазначеного діапазону значень повідомленні. GetMessage не отримати повідомлення для вікон, які належать до тих чи інших програм. BOOL GetMessage LPMSG lpMsg, / / адреса структури з повідомленням HWnd HWND, / / дескриптор вікна UINT wMsgFilterMin, / / Перше повідомлення UINT wMsgFilterMax / / останні повідомлення DispatchMessage функція розсилки повідомлень до вікна процедурою. Він звичайно використовується, щоб направити послання витягується GetMessage функції. LONG DispatchMessage CONST MSG * lpmsg / / покажчик на структуру з повідомленням Функція DefWindowProc викликає процедуру вікна за замовчуванням, щоб забезпечити обробки за замовчуванням для будь-якого вікна повідомлень, програма не процес. Ця функція забезпечує обробку кожного повідомлення. DefWindowProc викликається з тими ж параметрами отриманої вікно процедури. LRESULT DefWindowProc HWnd HWND, / / дескриптор вікна UINT Msg, / / ідентифікатор повідомлення WPARAM wParam, / / перший параметр повідомлення LPARAM LPARAM / / другий параметр повідомлення Ця функція одержує загальну, клас чи приватний контекст пристрою, в залежності від класу стилю, зазначеного для вказаного вікна. Для загального контексту пристрою, GetDC замовчуванням присвоює атрибути контексту пристрою кожен раз, коли знайшла його. Для класу і приватних контекстів пристрої, GetDC залишає раніше призначених незмінними атрибутами. HDC GetDC HWND HWnd / / дескриптор вікна Функція SelectObject вибирає об'єкт в зазначеному контексті пристрою. Новий об'єкт замінює попередній об'єкт того ж типу. HGDIOBJ SelectObject HDC HDC, / / дескриптор контексту пристрою HGDIOBJ hgdiobj / / дескриптор об'єкта Функція ReleaseDC релізи контексті пристрою (DC), звільняючи його для використання іншими додатками. Ефект функції ReleaseDC залежить від типу пристрою зв'язку. Він звільняє тільки загальні і контекстів вікні пристрою. Це не впливає на клас чи приватні контексти пристрою. Int ReleaseDC HWnd HWND, / / дескриптор вікна HDC ЬВС / / дескриптор контексту пристрою Функція CreateSolidBrush створює логічні щітку, який вказаний суцільний колір. HBRUSH CreateSolidBrush ( COLORREF crColor / / щітка значення кольору Функція Rectangle малює прямокутник прямокутника. Прямокутник викладається з використанням поточного пера і заповнити за допомогою поточної кисті. BOOL Прямокутник HDC HDC, / / дескриптор контексту пристрою Int nLeftRect, / / X-коорд. обмежує прямокутника верхньому лівому куті Int nTopRect, / / Y-коорд. обмежує прямокутника верхньому лівому куті Int nRightRect, / / X-коорд. обмежує прямокутник в нижньому правому куті Int nBottomRect / / Y-коорд. обмежує прямокутник в нижньому правому куті Функція TextOut записує рядок символів у вказаному місці, з використанням вибраного шрифту. BOOL TextOut HDC HDC, / / дескриптор контексту пристрою Int nXStart, / / X-координата стартову позицію Int nYStart, / / Y-координата стартову позицію LPCTSTR lpString, / / адреса рядка Int cbString / / кількість символів у рядку Функція SendMessage відправляє повідомлення для зазначеного вікна або вікна. Функція викликається вікно процедура для зазначеного вікна і не повертається до вікна процедура оброблених повідомлень. PostMessage функції, на відміну від посади повідомлення до повідомлення потоку черзі і відразу ж повертається. LRESULT SendMessage HWnd HWND, / / дескриптор вікна призначення UINT Msg, / / Відправити повідомлення WPARAM wParam, / / перший параметр повідомлення LPARAM LPARAM / / другий параметр повідомлення Lstrlen функція повертає довжину в байтах (ANSI версії) або символів (Unicode версії) зазначеної рядку (не включаючи нульовий символ). Int lstrlen LPCTSTR lpString / / адреса рядка в кол – CreateFontIndirect функція створює логічного шрифту, який має характеристики, зазначені у зазначеній структурі. Шрифт в подальшому може бути встановлений як поточний шрифт для будь-якого мобільного пристрою зв'язку. HFONT CreateFontIndirect CONST LOGFONT lplf * / / покажчик на логічну структуру шрифту Функція DeleteObject видаляє логічне перо, пензель, шрифт, растрові, регіону або палітру, звільняючи всі системні ресурси, пов'язані з об'єктом. Після того як об'єкт віддаляється, вказаний ручка вже не дійсні. BOOL DeleteObject HGDIOBJ hObject / / дескриптор графічного об'єкта Функція MessageBox створює, відображає і управляє вікні повідомлення. Вікно повідомлень містить додаток певних повідомлень і назви, а також будь-яку комбінацію зумовлених іконок і натискати кнопки. Int MessageBox HWnd HWND, / / дескриптор вікна власника LPCTSTR lpText, / / адреса тексту у вікні повідомлення LPCTSTR lpCaption, / / адреса Тема повідомлення вікна UINT uType / / Стиль вікна повідомлення TranslateMessage функція переводить віртуальних клавіш повідомлень в характері повідомлень. Характер повідомлення будуть відправлені в зухвалу черги повідомлень потоку, який буде читати наступний раз, коли потік викликає GetMessage або PeekMessage функції. BOOL TranslateMessage CONST MSG * lpMsg / / адресу структури з повідомленням SetTimer функція створює таймер з вказаного часу очікування. UINT SetTimer HWnd HWND, / / дескриптор вікна по таймеру повідомленнях UINT nIDEvent, / / ідентифікатор таймера UINT uElapse, / / тайм-ауту TIMERPROC lpTimerFunc / / адреса таймера процедура GetScrollPos функція повертає поточну позицію прокрутки вікна (великий палець) у зазначеній смузі прокручування. Нинішня позиція є відносне значення, яке залежить від поточної прокручування діапазону. Наприклад, при прокручуванні діапазоні від 0 до 100 і прокручування вікна в середині бар, поточна позиція 50. Int GetScrollPos HWnd HWND, / / дескриптор вікна зі смугою прокрутки Int NBAR / / виділити прапорами бару Функція Sleep призупиняє виконання поточного потоку протягом певного інтервалу. VOID Sleep DWORD dwMilliseconds / / сну час в мілісекундах .386 .model flat,STDCALL extrn InitCommonControls:Proc, GetModuleHandleA:Proc, ExitProcess:Proc extrn CreateWindowExA:Proc, RegisterClassA:Proc, GetMessageA:Proc extrn DispatchMessageA:Proc, DefWindowProcA:Proc, _wsprintfA:Proc extrn GetDC:Proc, SelectObject:Proc, ReleaseDC:Proc, CreateSolidBrush:Proc extrn Rectangle:Proc, TextOutA:Proc,SendMessageA:Proc, lstrlen:Proc extrn CreateFontIndirectA:proc, DeleteObject:proc extrn TranslateMessage:proc, MessageBoxA:proc, SetTimer:proc,GetScrollPos:proc extrn Sleep:proc WS_CHILD EQU 40000000h WS_POPUP EQU 80000000h WS_VISIBLE EQU 010000000h WS_DLGFRAME EQU 400000h WM_KEYDOWN EQU 100h WM_CTLCOLORSTATIC equ 138h TBS_TOP EQU 0004h WM_NOTIFY EQU 4Eh WM_HSCROLL EQU 114h TBM_SETRANGE EQU 1030 ACS_AUTOPLAY equ 0004h WM_USER equ 400h ACM_OPEN equ WM_USER+100 ACM_PLAY equ WM_USER+101 ES_CENTER equ 1h ES_MULTILINE equ 4h WM_TIMER equ 113h WM_SETTEXT equ 0Ch WM_HSCROLL equ 114h EM_GETLINE equ 0C4h TBM_SETPOS equ WM_USER+5 SB_HORZ equ 0 SB_VERT equ 1 SB_CTL equ 2 WM_HSCROLL equ 114h WM_COMMAND equ 111h ;===================================================== .data WC dd 4003h,offset WndProc,5 dup(0),1,0,offset WndClassName msg dd 0 msMESSAGE dd 0 msWPARAM dd 0,0,0,0,0 AppHWnd dd 0 MainHWnd dd 0 CHILD_CLASS_NAME db 'msctls_trackbar32',0 CLASS_NAME_ANIMATE DB 'SysAnimate32',0 CLASS_NAME_EDIT DB 'Edit',0 Video db 'TEST.avi',0 buf db 255 dup(0) buf_time db 8 dup(0) FORMAT_time db '%ld',0 lich_time dd 16 t1 dd 0 H1 dd 0 WndClassName db "ABBA",0 COLOR dd 0 Brush dd 0 HDC dd 0 HEdit dd 0 HTEXT dd 0 HTime dd 0 TRACK_ID dd 0 TRACK_ID1 dd 0 FORMAT db 'Êîëið = %X',0 PRINT_BUF db 20 dup(0) d dd 1 dx1 dd 10 d1 dd 1 x dd 1280 y dd 585 ;======================================================= .code Start: call GetModuleHandleA,0 ; îòðèìàòè õåíäë ïðîãðàìè äëÿ ñòâîðåííÿ â³êíà; mov AppHWnd,eax call RegisterClassA,offset WC ; çàðåºñòðóâàòè íîâèé êëàñ â³êîí; call CreateWindowExA,0,eax,0,WS_POPUP or WS_VISIBLE or WS_DLGFRAME, 0,0,1280,1280,0,0,AppHWnd,0 mov MainHWnd,eax call CreateWindowExA,0,offset CHILD_CLASS_NAME,0,WS_CHILD or WS_VISIBLE or TBS_TOP, 5,735,1280,35,MainHWnd,0,AppHWnd,0 mov H1,eax call SendMessageA,eax,TBM_SETRANGE,1,255*10000h call CreateWindowExA,0,offset CHILD_CLASS_NAME,0,WS_CHILD or WS_VISIBLE or TBS_TOP, 5,695,1280,35,MainHWnd,1,AppHWnd,0 call SendMessageA,eax,TBM_SETRANGE,1,255*10000h call CreateWindowExA,0,offset CHILD_CLASS_NAME,0,WS_CHILD or WS_VISIBLE or TBS_TOP, 5,655,1280,35,MainHWnd,2,AppHWnd,0 call SendMessageA,eax,TBM_SETRANGE,1,255*10000h call CreateWindowExA,0,offset CLASS_NAME_EDIT,0, WS_CHILD or WS_VISIBLE or TBS_TOP or 1h or 4h, 10,600,40,25,MainHWnd,0,AppHWnd,0 mov HTime,eax call SetTimer,HTime,0,200,0 mov t1,eax ;========================================================== msg_loop: call GetMessageA,offset msg,MainHWnd,0,0 cmp msMESSAGE,WM_KEYDOWN ; Ïîâ³äîìëåííÿ êëàâ³àòóðè jnz CONTINUE_LOOP cmp msWPARAM,1bh ; ÿêùî êîä <ESC>, òî STOP jz STOP cmp msWPARAM,EM_GETLINE jz Message CONTINUE_LOOP: call TranslateMessage, offset msg Call DispatchMessageA,offset msg cmp msMESSAGE, WM_TIMER jz Time Jmp msg_loop STOP: call ExitProcess,0 Message: call SendMessageA, HEdit,0dh,255,offset buf call MessageBoxA,0,offset buf,0,40h jmp msg_loop Time: call _wsprintfA,offset buf_time, offset FORMAT_time, lich_time call SendMessageA,HTime,WM_SETTEXT,0,offset buf_time add lich_time,64 cmp d,255 jg l1 cmp d,1 jl l1 l2: mov eax,dx1 add d,eax call SendMessageA,H1,TBM_SETPOS,1,d call SendMessageA,MainHWnd,WM_NOTIFY,0,0 mov eax,d shl eax,16 call SendMessageA,MainHWnd,WM_HSCROLL,eax,eax jmp msg_loop l1: neg dx1 jmp l2 ;========================================================== WndProc proc hwnd:DWORD, wmsg:DWORD, wparam:DWORD, lparam:DWORD Cmp wmsg,WM_CTLCOLORSTATIC ; ïåðåìàëüîâóåì â³êíî Jz PAINT1 ; cmp wmsg,WM_HSCROLL ;jnz TMP1 ; call MessageBoxA,0,offset CLASS_NAME_ANIMATE,offset CLASS_NAME_ANIMATE,0 ; call GetScrollPos,H1,SB_CTL ; mov esi,offset COLOR ; mov [esi],al TMP1: Cmp wmsg,WM_NOTIFY ; WM_NOTIFY íàäõîäèòü â³ä êîæíîãî Jnz NO_NOTIFY ; äî÷³ðíüîãî â³êíà, ïðè òîìó Mov eax,wparam ; wparam ì³ñòèòü ³äåíòèô³êàòîð Xchg eax,TRACK_ID1 ; äî÷³ðíüîãî â³êíà â³ä ÿêîãî íàä³éøëî Xchg eax,TRACK_ID ; ïîâ³äîìëåííÿ, ÿêèé çàïèñóºìî ó TRACK_ID; NO_NOTIFY: cmp wmsg,WM_HSCROLL ; WM_HSCROLL íàäõîäèòü â³ä Jnz NO_CHILD ; â³êîí òèïó "ãîðèçîíòàëüíèé ñêðîë³íã" Mov eax,wparam ; ìîëîäøà ÷àñòèíà wparam - ä³ÿ, Shr eax,16 ; ñòàðøà ÷àñòèíà - ïîçèö³ÿ êîâçóíà; Jz NO_CHILD ; ÿêùî ïîçèö³ÿ = 0, òî âèéòè ç ïðîöåäóðè; Mov ebx,TRACK_ID ; TRACK_ID - ïîòî÷íèé ³äåíòèô³êàòîð, à Cmp ebx,TRACK_ID1 ; TRACK_ID1 - ïîïåðåäí³é ³äåíòèô³êàòîð Jnz NO_CHILD ; äî÷³ðíüîãî â³êíà, ÿê³ ïîâèíí³ ñï³âïàäàòè; Add ebx,offset COLOR ; ³äåíòèô³êàòîð âèêîðèñòîâóºòüñÿ Mov [ebx],al ; ÿê ³íäåêñ êîëüîðó; Call CreateSolidBrush,COLOR ; ñòâîðþºòüñÿ êèñòü çàäàíîãî êîëüîðó Mov Brush,eax ; çàïèñàòè õåíäë êèñò³; PAINT1: Call GetDC, hwnd ; îäåðæóºìî ãðàô³÷íèé êîíòåêñò Mov HDC,eax ; â³êíà ³ çáåð³ãàºìî éîãî; Call SelectObject,HDC,Brush ; çì³íþºìî ïîòî÷íó êèñòü; Call Rectangle,HDC,0,0,x,y ; ìàëþºìî ïðÿìîêóòíèê dec x call Sleep,20 dec y call Sleep,20 cmp x,100 cmp y,100 jz C1 C1: call SelectObject,HDC,HTEXT Call _wsprintfA, offset PRINT_BUF,offset FORMAT,COLOR Add esp,4*3 ; íåîáõ³äíî ëèøå äëÿ _wsprintfA; Call lstrlen,offset PRINT_BUF ; îòðèìóºìî äîâæèíó ðÿäêà call TextOutA, HDC, 100,605 , offset PRINT_BUF, eax call DeleteObject,HTEXT call ReleaseDC,0,HDC ; çâ³ëüíÿºìî ãðàô³÷íèé êîíòåêñò; NO_CHILD: ; ì³òêà âèõîäó ç ïðîöåäóðè; Call DefWindowProcA,hwnd,wmsg,wparam,lparam ; ñòàíäàðòíèé âèõ³ä, Ret ; ïîâåðíåííÿ ç ïðîöåäóðè; WndProc endp End Start Висновок: під час лабораторної роботи я навчитися будувати ієрархічну структуру вікон.
Антиботан аватар за замовчуванням

29.11.2012 17:11-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!