Графічні функції Windows-інтрефейса (WinAPI)

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

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

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

Рік:
2005
Тип роботи:
Лабораторна робота
Предмет:
Моделювання

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

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ Національний університет “Львівська політехніка” Лабораторна робота №3 з курсу “Геометричне моделювання” на тему Графічні функції Windows-інтрефейса (WinAPI) засобами Borland Pascal 7.0 for Windows та Borland Delphi Львів – 2005 МЕТА РОБОТИ Ознайомлення та практичне освоєння технології й основ роботи з графічними можливостями Windows-інтерфейсу (WinAPI) операційного середовища Wіndows,що можуть викликатися прикладними програмами. Вивчити основні графічні функцій та процедури WinAPI (Win32API) засобами програмного середовища Borland Pascal 7.0 for Windows та візуального середовища програмування Borland Delphi, набути практичних навиків переходу з програмування графіки для операційної системи DOS до оволодіння принципами створення Wіndows-программ, розробки графічних процедур та програм WinAPI. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ 1. НА ЛАШТУВАННЯ ПАРАМЕТРІВ СЕРЕДОВИЩА BORLAND PASCAL FOR WINDOWS  Рис. 1 Основні елементи віконної оболонки Borland Pascal 7.0 for Window ПРИНЦИПИ ОРГАНІЗАЦІЇ ПРОГРАМ ДЛЯ DOS І ДЛЯ WІNDOWS DOS є однозадачной операційною системою. Програма, що виконується в середовищі DOS, керується потоком даних. Після ініціалізації (запуску програми) перша програмна процедура виробляє дані, і в залежності від їхнього змісту виробляється виконання наступної процедури, що знову генерує дані і так далі (рис. 3). При визначених даних виробляється деініціалізація програми.  Рис.3 Схема обробки задач у DOS Wіndows є багатозадачною операційною системою і по суті не може керуватися потоком даних. Після ініціалізації (запуску) програми керування одержує не яка-небудь робоча процедура цієї програми, а диспетчер подій. Подія в термінах Wіndows розуміється як факт здійснення елементарної дії, від якого може залежати хід виконання програми. Це, приміром, натискання клавіші, переміщення курсору миші, завершення визначеного часового інтервалу. Дії, виконувані диспетчером подій: а) одержання (фіксація) події; б) перевірка умови виходу з програми; в) вибір потрібної процедури обробки події (диспетчирування). Коли обрана процедура завершує роботу, керування знову повертається диспетчеру подій (рис. 4). При фіксації події, що завершує програму, диспетчер завершує свою роботу і передає керування процедурі деініціалізації.  Рис.4 Схема обробки задач у Windows Перевагою такої схеми керування ходом програми є універсальність. При модернізації програм для введення нової реакції на подію, що вводиться в програму, потрібно лише додати процедуру обробки цієї події без порушення базового коду програми. Для цього всі події в Wіndows приводяться до стандартного виду визначеної структури (повідомленню). ІНДИВІДУАЛЬНЕ ЗАВДАННЯ Варіант №22 Написати програму із застосуванням графічних функцій WinAPI, яка дозволяє візуалізувати графік(и) функції з можливостями масштабування у вікні на певному інтервалі. Застосувати функції зміни кольору, штриховки, зафарбування замкнутих областей, текстових підписів, виводу координатної сітки. Організувати вивід графіка у зовнішній метафайл. Побудувати графіки функції задані в параметричній формі, в різних областях вікна для різних значень коефіцієнта «А». X(t)=(1+A)cos(t); Y(t)=(1-A)sin(t); t=[0..4]; A=[-2,-1,1,4]; ТЕКСТ ПРОГРАМИ program l3; {$APPTYPE CONSOLE} {модулі windows та messages найнеобхідніші - вони обов'язково повинні бути оголошені на початку кожної Вашої програми!} uses SysUtils, windows, messages, math; var wc: TWndClassEx; // Зміна шаблону класу вікна MainWnd:HWND; // Описувач головного вікна Mesg: TMsg; // Змінна для циклу збора повідомлень x_center,y_center,xPos, yPos, nWidth, nHeight,scale : integer; stepofnet: real; MyDc: hDC; // контекст пристрою rec: TRect; // структура розмірів вікна xd,yd:Extended; pen: array[1..7] of hpen; brush: array[1..4] of hBrush; hmf:HmetaFile; {Далі описана віконна процедура головного вікна. Зверніть увагу на службове слово stdcall воно примушує компілятор генерувати спеціальний вид коду, який може бути викликаний довільною windows- програмою, без цього службового слова програма не зможе працювати взагалі!} function WindowProc(wnd:HWND; msg:integer; Wparam:Wparam;Lparam:Lparam):Lresult;stdcall; begin case msg of wm_destroy: { --- Далі проходить цикл обробки повідомлень --- } begin postquitmessage(0);exit; Result:=0; end else Result:=DefWindowProc(wnd,msg,wparam,lparam); end; end; procedure Net;{ --- Процедура малювання сітки --- } var i:integer; begin i:=1; selectobject(MyDc,pen[1]); while (round(i*StepOfNet)+x_center)<=nWidth do Begin MoveToEx(MyDc,x_center-round(i*StepOfNet),0,nil); LineTo(MyDC,x_center-round(i*StepOfNet),nHeight); MoveToEx(MyDc,x_center+round(i*StepOfNet),0,nil); LineTo(MyDC,x_center+round(i*StepOfNet),nHeight); i:=i+1; End; i:=1; while (round(i*StepOfNet)+y_center)<=nHeight do Begin MoveToEx(MyDc,0,y_center-round(i*StepOfNet),nil); LineTo(MyDC,nWidth,y_center-round(i*StepOfNet)); MoveToEx(MyDc,0,y_center+round(i*StepOfNet),nil); LineTo(MyDC,nWidth,y_center+round(i*StepOfNet)); i:=i+1; End; selectobject(MyDc,pen[2]); MoveToEx(MyDc,0,y_center,nil); LineTo(MyDC,nWidth,y_center); MoveToEx(MyDc,x_center,0,nil); LineTo(MyDC,x_center,nHeight); end; { --- процедура малювання графіку #1 --- } procedure paint_graph(A:integer; gpen:hPen); var i:integer; y,x,dx:Extended; begin selectObject(Mydc,gpen); x:=0; dx:=0.01; y:=(1 + A) * cos(x); MoveToEx(MyDC,x_center+Round(x*scale),y_center+Round(y*scale),nil); while x<=4 do begin y:=(1 + A) * cos(x); LineTo(MyDC,x_center+Round(x*scale),y_center+Round(y*scale)); x:=x + dx; end; end; { --- процедура малювання графіку #2 --- } procedure paint_graph1(A:integer; gpen:hPen); var i:integer; y,x,dx:Extended; begin selectObject(Mydc,gpen); x:=0; dx:=0.01; y:=(1 - A) * sin(x); MoveToEx(MyDC,x_center+Round(x*scale),y_center+Round(y*scale),nil); while x<=4 do begin y:=(1 - A) * sin(x); LineTo(MyDC,x_center+Round(x*scale),y_center+Round(y*scale)); x:=x + dx; end; end; begin // --- Тіло програми write('scale '); readln(scale); write('step of net '); readln(stepofnet); { --- Далі йде заповнення шаблону класу вікна --- } wc.cbSize:=sizeof(wc); wc.style:=cs_hredraw or cs_vredraw; wc.lpfnWndProc:=@WindowProc; wc.cbClsExtra:=0; wc.cbWndExtra:=0; wc.hInstance:=Hinstance; wc.hIcon:=LoadIcon(0,idi_application); wc.hCursor:=LoadCursor(0,idc_arrow); wc.hbrBackground:=color_btnface+1; wc.lpszMenuName:=nil; wc.lpszClassName:='WinMin:Main'; RegisterClassEx(wc); // --- Реєстрація нового класу в системі nWidth:=600; nHeight:=500; x_center:=nWidth div 5; y_center:=nHeight div 2; xPos:=10; yPos:=10; MainWnd:=CreateWindowEx(0,'WinMin:Main','ЛР №3: Побудова графіків функцій',ws_overlappedwindow,xPos,yPos,nWidth,nHeight,0,0,Hinstance,nil ); ShowWindow(MainWnd,CmdShow); // --- Відображуємо вікно // --- Цикл обробки повідомлень // --- він може злегка видозмінюватися, але ці строки присутні завжни pen[1]:=createpen(ps_solid,1,rgb(180,180,180)); pen[2]:=createpen(ps_solid,2,rgb(0,0,0)); pen[3]:=createpen(ps_solid,2,rgb(255,0,0)); pen[4]:=createpen(ps_solid,2,rgb(0,0,255)); // --- робота з графічними функціями GetClientRect(MainWnd,rec); MyDc:=GetDC(MainWnd); net; paint_graph(-2, pen[3]); paint_graph(-1, pen[3]); paint_graph(1, pen[3]); paint_graph(4, pen[3]); paint_graph1(-2, pen[4]); paint_graph1(-1, pen[4]); paint_graph1(1, pen[4]); paint_graph1(4, pen[4]); while GetMessage(Mesg,0,0,0) do begin TranslateMessage(Mesg); DispatchMessage(Mesg); end; CreateMetaFile('g.wmf'); ReleaseDC(MainWnd,MyDc); // --- звільнення зсилки DeleteDC(MyDC); // --- видалення зсилки end. РЕЗУЛЬТАТ ВИКОНАННЯ ПРОГРАМИ  ВИСНОВОК Під час лабораторної роботи я ознайомився та практично освоїв технології й основи роботи з графічними можливостями Windows-інтерфейсу (WinAPI) операційного середовища Wіndows,що можуть викликатися прикладними програмами. Вивчив основні графічні функцій та процедури WinAPI (Win32API) засобами програмного середовища Borland Pascal 7.0 for Windows та візуального середовища програмування Borland Delphi, набув практичних навиків переходу з програмування графіки для операційної системи DOS до оволодіння принципами створення Wіndows-программ, розробки графічних процедур та програм WinAPI.
Антиботан аватар за замовчуванням

02.10.2020 20:10-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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