0% found this document useful (0 votes)
112 views3 pages

Laboratorul 2 - PPE

This document contains C code for a Windows application that draws graphics using GDI. It defines functions for drawing circles that move around the screen, loading an image, and drawing sine waves. The WinMain function registers a window class and creates a window. The WndProc function handles window messages like paint, resize, and destroy. It loads an image, stretches it to the client area, draws text and sine waves. It also calls the circle function to draw colored circles that change direction when hitting the edges of the client rectangle.

Uploaded by

crismaruion
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
112 views3 pages

Laboratorul 2 - PPE

This document contains C code for a Windows application that draws graphics using GDI. It defines functions for drawing circles that move around the screen, loading an image, and drawing sine waves. The WinMain function registers a window class and creates a window. The WndProc function handles window messages like paint, resize, and destroy. It loads an image, stretches it to the client area, draws text and sine waves. It also calls the circle function to draw colored circles that change direction when hitting the edges of the client rectangle.

Uploaded by

crismaruion
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 3

Nume Prenume:Laboratorul nr2.

#include <windows.h>
#include <math.h>
#define NUM 1000
#define TWOPI (2 * 3.14159)

int a[3][6] = { { 123, 343, 100, 163, 232, 166 }, { 128, 15, 129, 74, 234, 255 }, { 1,
2, 3, 4, 1, 4 } };
int circle(HWND hwnd, HDC hdc, int i, int j, int dir, RECT rect, int nr)
{
HPEN hYellowPen;
HBRUSH hRedBrush;
hYellowPen = CreatePen(PS_SOLID, 1, RGB(255, 255, 0));
hRedBrush = CreateSolidBrush(RGB(255, 0, 0));
if (j + 150>rect.bottom)
{
if (dir == 1)a[2][nr] = 2; else a[2][nr] = 3;
}
if (i + 150>rect.right)
{
if (dir == 2)a[2][nr] = 3; else a[2][nr] = 4;
}
if (j + 50<rect.top)
{
if (dir == 3)a[2][nr] = 4; else a[2][nr] = 1;
}
if (i + 50<rect.left)
{
if (dir == 4)a[2][nr] = 1; else a[2][nr] = 2;
}
switch (a[2][nr])
{
case 1:{
a[0][nr]++; a[1][nr]++; break;
}
case 2:{
a[0][nr]++; a[1][nr]--; break;
}
case 3:{
a[0][nr]--; a[1][nr]--; break;
}
case 4:{
a[0][nr]--; a[1][nr]++; break;
}
}
switch (nr)
{
case 0:{SelectObject(hdc, hYellowPen); SelectObject(hdc, hRedBrush); break; }
}
Rectangle(hdc, a[0][nr] + 50, a[1][nr] + 50, a[0][nr] + 150, a[1][nr] + 150);

DeleteObject(hYellowPen);
DeleteObject(hRedBrush);

return dir;
}

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static char szAppName[] = "SineWave";
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = (LPCWSTR)szAppName;
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&wndclass);
hwnd = CreateWindow((LPCWSTR)szAppName, L"Interfata GDI",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
static int cxClient, cyClient;
HDC hdc, hCompatibleDC;
int i;
PAINTSTRUCT ps;
POINT pt[NUM];
PAINTSTRUCT PaintStruct;
HANDLE hBitmap, hOldBitmap;
RECT Rect;
BITMAP Bitmap;

switch (iMsg)
{
case WM_SIZE:
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);

hBitmap = LoadImage(NULL, L"asd.BMP",


IMAGE_BITMAP, 700, 430,
LR_LOADFROMFILE);
GetObject(hBitmap, sizeof(BITMAP), &Bitmap);
hCompatibleDC = CreateCompatibleDC(hdc);
hOldBitmap = SelectObject(hCompatibleDC, hBitmap);
GetClientRect(hwnd, &Rect);
StretchBlt(hdc, 0, 0, cxClient, cyClient,
hCompatibleDC, 0, 0, Bitmap.bmWidth,
Bitmap.bmHeight, SRCCOPY);
SelectObject(hCompatibleDC, hOldBitmap);
DeleteObject(hBitmap);
DeleteDC(hCompatibleDC);
DrawText(hdc, L"Lucrare de laborator Nr2 ", -1, &Rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
for (i = 0; i < NUM; i++)
{
pt[i].x = i * cxClient / NUM;
pt[i].y = (int)(cyClient / 2 *
(1 - sin(TWOPI * i / NUM)));
}
Polyline(hdc, pt, NUM);

InvalidateRect(hwnd, NULL, TRUE);


circle(hwnd, hdc, a[0][0], a[1][0], a[2][0], Rect, 0);
Sleep(50);

EndPaint(hwnd, &PaintStruct);
return 0;

case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, iMsg, wParam, lParam);

You might also like