0% au considerat acest document util (0 voturi)
215 vizualizări6 pagini

PPE Lab3

Acest document prezintă un raport de laborator care descrie un program care afișează curbe Bezier utilizând funcții GDI și formule matematice. Programul permite modificarea curbelor cu ajutorul tastaturii și mouse-ului, oferind o interfață interactivă.

Încărcat de

DanuIepuras
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
0% au considerat acest document util (0 voturi)
215 vizualizări6 pagini

PPE Lab3

Acest document prezintă un raport de laborator care descrie un program care afișează curbe Bezier utilizând funcții GDI și formule matematice. Programul permite modificarea curbelor cu ajutorul tastaturii și mouse-ului, oferind o interfață interactivă.

Încărcat de

DanuIepuras
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.

Ministerul Educației al Republicii Moldova

Universitatea Tehnică a Moldovei

Facultatea Calculatoare, Informatică şi Microelectronică

Departamentul Ingineria Software şi Automatică

Raport
Lucrarea de laborator nr.3
Disciplina: Programarea Pilotată de Evenimente

A efectuat: st. gr. Iepuraș Daniel

A verificat [Link]. M. Potlog

Chișinău - 2018
Tema: “Curbe Bezier. Principiile de lucru cu tastatura.
Principiile de lucru cu mouse-ul.”

Scopul lucrării:

 studierea primitivelor grafice ce permit afişarea curbelor Bezier ;


 afişarea acestor curbe cu ajutorul formulelor;
 studierea metodelor şi principiilor de lucru cu tastatura;
 însuşirea modului de prelucrare a mesajelor parvenite de la tastatura;
 studierea metodelor şi principiilor de lucru cu mouse-ul;
 însuşirea modului de prelucrare a mesajelor parvenite de la şi mouse.

Sarcina lucrării:

Scrieţi un program care afişază curba Bezier, utilizând funcţiile GDI standarde şi o
curbă Bezier, afişată după calcule prin formule. Una din curbe să poată fi mişcată
cu ajutorul tastelor ← (la stânga), ↑(în sus), →(la dreapta), ↓(în jos). De asemenea,
trebuie să fie prevăzute taste pentru rotirea acestei curbe. Modificați curba a doua
astfel ca punctele de control să poată fi deplasate, schimbînd forma curbei în timp
real.

Listingul programului:
#include <windows.h>

#define IDM_EXIT 1
#define IDM_CLEAR 4
#define IDM_BEZ1 100
#define IDM_BEZ2 101

bool bezier1 = false;


bool bezier2 = false;
HINSTANCE hInst;
POINT Pt[4] = { { 100, 48 }, { 88, 246 }, { 364, 192 }, { 250, 48 } };
int varvar = 0;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void mybezier(HDC hdc, const POINT *Pt) {
mybezier(hdc, Pt);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static char szAppName[] = "HelloWin";
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;
[Link] = sizeof(wndclass);
[Link] = CS_HREDRAW | CS_VREDRAW;
[Link] = WndProc;
[Link] = 0;
[Link] = 0;
[Link] = hInstance;
[Link] = LoadIcon(NULL, IDI_APPLICATION);
[Link] = LoadCursor(NULL, IDC_ARROW);
[Link] = (HBRUSH)GetStockObject(WHITE_BRUSH);
[Link] = NULL;
[Link] = szAppName;
[Link] = LoadIcon(NULL, IDI_APPLICATION);

RegisterClassEx(&wndclass);
hwnd = CreateWindow(szAppName, // window class name
"Labroratorul nr.2 la Programarea Pilotata de Evenimente ", // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL); // creation parameters
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return [Link];
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{

int wmId, wmEvent;


HDC hdc;
PAINTSTRUCT ps;
RECT rect;
HMENU hMenubar = CreateMenu();
HMENU hFile = CreateMenu();
HMENU hOptions = CreateMenu();

switch (iMsg)
{
case WM_CREATE: {
HMENU hMenubar = CreateMenu();
HMENU hFile = CreateMenu();
HMENU hOptions = CreateMenu();

AppendMenu(hMenubar,MF_POPUP, (UINT_PTR)hFile,"File");
AppendMenu(hMenubar, MF_POPUP, NULL, "Edit");
AppendMenu(hMenubar, MF_POPUP, (UINT_PTR)hOptions, "Bezier");

AppendMenu(hFile, MF_STRING, IDM_EXIT, "Exit");


AppendMenu(hOptions, MF_STRING, IDM_BEZ1, "BEZ_1");
AppendMenu(hOptions, MF_STRING, IDM_BEZ1, "BEZ_2");
AppendMenu(hOptions, MF_STRING, IDM_CLEAR, "CLEAR");
SetMenu(hwnd,hMenubar);
break;
}
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Разобрать выбор в меню:
switch (LOWORD(wParam))
{
case IDM_EXIT:
DestroyWindow(hwnd);
break;
case IDM_BEZ1:
bezier2 = false;
bezier1 = true;
InvalidateRect(hwnd, NULL, TRUE);
break;
case IDM_BEZ2:
bezier2 = true;
bezier1 = false;
InvalidateRect(hwnd, NULL, TRUE);
break;
case IDM_CLEAR:
bezier2 = false;
bezier1 = false;
InvalidateRect(hwnd, NULL, TRUE);
break;
default:
return DefWindowProc(hwnd, iMsg, wParam, lParam);
}
break;

case WM_PAINT:

hdc = BeginPaint(hwnd, &ps);


if (bezier1)
PolyBezier(hdc, Pt, 4);
else if(bezier2)
mybezier(hdc, Pt);

EndPaint(hwnd, &ps);
return 0;

case WM_KEYDOWN:
switch (wParam)
{
case VK_NUMPAD8:
Pt[3].y--;
InvalidateRect(hwnd, NULL, TRUE);
break;

case VK_NUMPAD2:
Pt[3].y++;
InvalidateRect(hwnd, NULL, TRUE);
break;

case VK_NUMPAD6:
Pt[3].x++;
InvalidateRect(hwnd, NULL, TRUE);
break;

case VK_NUMPAD4:
Pt[3].x--;
InvalidateRect(hwnd, NULL, TRUE);
break;

case VK_UP:
Pt[0].y--;
InvalidateRect(hwnd, NULL, TRUE);
break;

case VK_DOWN:
Pt[0].y++;
InvalidateRect(hwnd, NULL, TRUE);
break;

case VK_RIGHT:
Pt[0].x++;
InvalidateRect(hwnd, NULL, TRUE);
break;

case VK_LEFT:
Pt[0].x--;
InvalidateRect(hwnd, NULL, TRUE);
break;
default:
break;
}
break;

case WM_MOUSEMOVE:
if (GetKeyState(MK_RBUTTON))
{
Pt[varvar].x = LOWORD(lParam);
Pt[varvar].y = HIWORD(lParam);
InvalidateRect(hwnd, NULL, TRUE);
}
break;
case WM_LBUTTONDOWN:
if (varvar == 3) varvar = -1;
varvar++;
break;

case WM_DESTROY:
PostQuitMessage(0);
return 0;
}

return DefWindowProc(hwnd, iMsg, wParam, lParam);


}
Rezultatul programului:

Fig.1 – Curba Bezier modificata cu ajutorul tastaturii si a mouse-ului

Concluzie:

In urma efectuarii acestei lucrari de laborator am studiat bazele şi principiile


de lucru cu tastatura si mouse-ul. De asemenea am invatat primitivele grafice ce
permit afișarea curbei Bezier , am învățat afișarea curbei cu ajutorul formulelor, am
insușit modul de prelucrare a mesajelor parvenite de la tastatură si mouse.

S-ar putea să vă placă și