Стандартні класи вікон та їх типи.

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

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

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

Рік:
2014
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Системне програмування

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

Міністерство освіти і науки України Національний університет “Львівська політехніка” Кафедра АСУ Звіт до лабораторної роботи №4 з курсу « Системного програмування» на тему «Стандартні класи вікон та їх типи.» Львів 2014 Мета роботи: зрозуміти поняття вікна в операційній системі Windows. ТЕОРЕТИЧНІ ПОЛОЖЕННЯ Все, що бачить користувач на екрані в системі WINDOWS є вікном. Вікно – це графічна оболонка, через яку програма може спілкуватися з користувачем. Якщо програмі не потрібно спілкуватись, то вона може і не створювати вікна. Вікно може володіти набором інших вікон, які називаються дочірніми (кнопки, рядки вводу, і т.д.). Кожне вікно має власний набір властивостей який відрізнятися певною специфікою спілкування з користувачем. Такі специфічні особливості називаються класом вікна. Існують стандартні класи, наприклад, вікно–регулювач, вікно-кнопка, вікно для вводу тексту, вікно-підказка та інші. Кожний стандартний клас має унікальну назву, яка дійсна для всіх версій операційних систем WINDOWS. Нижче приведено перелік стандартних класів вікона: BUTTON Стандартна прямокутня кнопка COMBOBOX Комбінований список з полем редагування у верхній частині або випадний список вибору. EDIT Прямокутний елемент редагування для введення тексту користувачем. Може містити одну або декілька рядків. LISTBOX Елемент типу список. Елемент управління, що містить список рядків, які можуть бути вибрані. MDICLIENT Клієнтське вікно багатодокументного інтерфейсу (MD1 — multiple-document interface). Це вікно отримує повідомлення, які управляють дочірніми вікнами багатодокументного інтерфейсу в застосуванні. Для правильної роботи застосування багатодокументного інтерфейсу необхідно створити вікно MIDIСLIENT. RICHEDlT Елемент управління Rich Edit версії 1.0. Елемент управління такого типу дозволяє редагувати текст з багатьма шрифтами і стилями. У Windows 2000 елемент управління цього типу емулює версію 1.0 на основі версії 3.0. SCROLLBAR Елемент управління лінійкою прокрутки. STATIC Елемент управління статичним текстом. Застосовується для розміщення у вікні тексту або рамок. Для створення вікна використовується функція CreateWindowEx. Опис функції можна знайти у довіднику. Це все добре, але як створити вікно з кнопками, рядками вводу і т.п., і заставити виконувати певну дію, наприклад, при натисненні кнопки або руханні мишки над вікном? Розберемося як будувати складні вікна. Першим кроком потрібно створити новий клас вікна, оскільки такого екземпляру у системі немає. Мається на увазі, є стандартні вікна, типу "кнопка", "рядок вводу", але немає стандартного вікна, який би містив в собі, наприклад, кнопку і рядок вводу. Для створення нового класу використовується процедура RegisterClassEx. Хоча документацію по функціям можна знайти у довіднику, для зрозумілості кожну функцію розглянемо детально. Другим кроком, потрібно на основі нового класу створити так зване "батьківське" вікно, тобто, вікно на якому будуть розташовані "дочірні" об’єкти (вікна). Дочірні - це вікна які розташовані на батьківському вікні та підпорядковані йому. Батьківське вікно обробляє всі повідомлення дочірнього вікна. Як вище було згадано, для створення вікна використовується функція Третім кроком, нам потрібно відфільтровувати повідомлення для нашої програми забирати з системи та відправляти їх на обробку у віконну процедуру. Цю дію виконує процедура GetMessage. Четвертим кроком буде перетворення віртуально-ключових повідомлень у повідомлення символів. Це робиться за допомогою процедури TranslateMessage. Останнім п’ятим кроком буде відправлення повідомлення у процедуру вікна за допомогою процедури DispatchMessage. Кроки 3,4,5 потрібно виконувати в циклі до тип пір поки функція GetMessage не поверне значення "0" або "-1". Тепер приступимо до найважливішої частини програми. Наступним кроком є створення процедури обробки повідомлень. Назва функції може бути довільна, але ця назва має фігурувати у коді програми при реєстрації класу(поле структури WNDCLASSEX – lpfnWndProc). Найчастіше процедура має назву WNDProc. Більш детальнішу інформацію можна знайти у довідці по WinApi функціях. Хід роботи: Створити 2 кнопки, рядок вводу, статичний текст. При натисненні кнопки №1 вивести діалог вибору файлів по фільтру "*.bmp". При виборі графічного файлу шлях до нього занести у рядок вводу. При натисненні кнопки №2, вивести зображення на вікно статичного тексту. Записую код програми: include windows.inc include user32.inc include kernel32.inc includelib user32.lib includelib kernel32.lib include comctl32.inc includelib comctl32.lib WinMain proto :DWORD,:DWORD,:DWORD,:DWORD .data ClassName db "Hata1",0 AppName db "Hrus4ovka",0 c_button db 'button',0 t_button db 'Tukalka',0 f db '%03d:%03d %s',0 c_skr db 'SCROLLBAR',0 c_anim db 'SysAnimate32',0 animahko dd 0 FILE1 db 'c:\PRG\ASM_\ASM\masm\Projects\Lab_4\1.avi',0 .data? hInstance HINSTANCE ? CommandLine LPSTR ? hbutton dd ? .586 .model flat,stdcall option casemap:none include laba4_11.inc include RADbg.inc .code ; --------------------------------------------------------------------------- start: invoke GetModuleHandle, NULL mov hInstance,eax invoke InitCommonControls invoke GetCommandLine mov CommandLine,eax invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT invoke ExitProcess,eax WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD LOCAL wc:WNDCLASSEX LOCAL msg:MSG LOCAL hwnd:HWND mov wc.cbSize,SIZEOF WNDCLASSEX mov wc.style, CS_HREDRAW or CS_VREDRAW mov wc.lpfnWndProc, OFFSET WndProc mov wc.cbClsExtra,NULL mov wc.cbWndExtra,NULL push hInstance pop wc.hInstance mov wc.hbrBackground,COLOR_BTNFACE+1 mov wc.lpszMenuName,NULL mov wc.lpszClassName,OFFSET ClassName invoke LoadIcon,NULL,IDI_HAND mov wc.hIcon,eax mov wc.hIconSm,eax invoke LoadCursor,NULL,IDC_ARROW mov wc.hCursor,eax invoke RegisterClassEx, addr wc INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\ WS_OVERLAPPEDWINDOW ,CW_USEDEFAULT,\ CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\ hInst,NULL mov hwnd,eax invoke CreateWindowEx,0,addr c_button,addr t_button,WS_BORDER+ WS_CHILD + WS_VISIBLE + BS_RIGHT,10,10,120,20,hwnd,0,hInstance,0 mov hbutton,eax invoke CreateWindowEx,0,addr c_skr,0,WS_VSCROLL+ WS_CHILD + WS_VISIBLE,400,10,20,300,hwnd,0,hInstance,0 invoke CreateWindowEx,0,addr c_anim,0,WS_CHILD + WS_VISIBLE,100,100,300,300,hwnd,0,hInstance,0 mov animahko,eax invoke ShowWindow, hwnd,SW_SHOWNORMAL invoke UpdateWindow, hwnd .WHILE TRUE invoke GetMessage, ADDR msg,NULL,0,0 .BREAK .IF (!eax) invoke TranslateMessage, ADDR msg invoke DispatchMessage, ADDR msg .ENDW mov eax,msg.wParam ret WinMain endp p1 proc hwin,lp:dword invoke LoadCursor,NULL,IDC_HAND invoke SetClassLong,hwin,GCL_HICON,eax invoke SendMessage,hwin, WM_SETICON,ICON_BIG,eax invoke SetWindowText,hwin,addr t_button mov eax,1 ret p1 endp WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM LOCAL x,y:dword LOCAL buf[50]:byte LOCAL p:POINT LOCAL buf2[200]:byte .IF uMsg==WM_DESTROY invoke PostQuitMessage,NULL .ELSEIF uMsg==WM_CREATE invoke SetTimer,hWnd,12,100,0 .elseif uMsg == WM_COMMAND mov eax,lParam .if eax == hbutton invoke EnumWindows,addr p1,0 invoke SendMessage,animahko,ACM_OPEN,0,addr FILE1 invoke SendMessage,animahko, ACM_PLAY, -1, -0ffffh .endif .elseif uMsg == WM_TIMER invoke GetCursorPos,addr p invoke ScreenToClient,hWnd,addr p invoke ChildWindowFromPoint,hWnd,p.x,p.y mov ecx,eax .if eax != hWnd invoke GetWindowText,ecx,addr buf2,200 invoke wsprintf,addr buf,addr f,p.x,p.y,addr buf2 invoke SetWindowText,hWnd,addr buf .endif ; .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF xor eax,eax ret WndProc endp end start Приклади виконання програми: / Висновок: на цій лабораторній роботі я навчився створювати вікна в операційній системі Windows. Створив 2 кнопки, рядок вводу, статичний текст. При натисненні кнопки №1 вивів діалог вибору файлів по фільтру "*.bmp". При виборі графічного файлу шлях до нього заніс у рядок вводу. При натисненні кнопки №2, вивів зображення на вікно статичного тексту.
Антиботан аватар за замовчуванням

17.03.2015 22:03-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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