Uploaded by nicueu

SodaPDF-converted-Lab3

advertisement
Lab3.cpp Defines the entry point for the application.
#include framework.h
#include Lab3.h
Lab2.1.cpp Defines the entry point for the application.
#include windows.h
#include iostream
#include stdlib.h
#include string.h
#include tchar.h
#include resource.h
#include time.h
#include map
#include string
#define IDT_MOVETIMER 2L se defineste un identificator pentru
#define IDT_COLORTIMER 1L
#define MS 1000
static TCHAR szWindowClass[] = _T(DesktopApp);
static TCHAR szTitle[] = _T(Tehnologia InformaČ›iei în EducaČ›ie);
HINSTANCE hInst;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
RECT clR;
int r, g, b;
struct RectStruct {
int x; top-left vertical
int y; top-left horizontal
int x1; bottom-right horizontal
int y1; bottom-right vertical
int vX;
int vY;
bool kW;
bool kS;
bool kA;
bool kD;
bool spbar;
bool shift;
bool ctrl;
};
RectStruct rct;
bool setPos(int posX, int posY, int posX1, int posY1) {
stdcout stdendl stdendl;
stdcout rct.x , rct.y , rct.x1 , rct.y1 stdendl;
rct.x = posX;
rct.y = posY;
rct.x1 = posX1;
rct.y1 = posY1;
r = re;
stdcout re.x , re.y , re.x1 , re.y1 stdendl;
stdcout rct.x , rct.y , rct.x1 , rct.y1 stdendl;
stdcout stdendl stdendl;
return true;
}
bool setKeyState()
functia care initializeaza punctele
POINT apt[4]; definim variabila globala
void InitBezierParams()
{
apt[0].x = 220; apt[0].y = 110;
apt[1].x = 260; apt[1].y = 20;
apt[2].x = 360; apt[2].y = 190;
apt[3].x = 420; apt[3].y = 110;
}
int CALLBACK WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpC
mdLine, _In_ int nCmdShow)
{
WNDCLASSEX wcex;
AllocConsole();
freopen(CONOUT$, w, stdout);
freopen(CONOUT$, w, stderr);
freopen_s(0, CONOUT$, w, stdout)
freopen_s((FILE)stdout, CONOUT$, w, stdout);
freopen_s(0, CONOUT$, w, stderr);
rct.x = 0; rct.y = 0; rct.x1 = 0; rct.y1 = 0; rct.vX = 0; rct.vY = 0;
setPos(50, 50, 200, 200);
rct.kW = rct.kA = rct.kS = rct.kD = rct.shift = rct.spbar = rct.ctrl = false;
stdcout Called WinMain stdendl; is called only once
r = g = b = 0;
int colorRefresh = 1 MS;
int movementTrack = 50;
srand(time(0)); functia care inbunatateste randomizarea
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
HBITMAP backgroundImage = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
wcex.hbrBackground = CreatePatternBrush(backgroundImage);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
if (!RegisterClassEx(&wcex))
{
MessageBox(NULL,
_T(Call to RegisterClassEx failed!),
_T(Windows Desktop Guided Tour),
NULL);
return 1;
}
hInst = hInstance;
HWND hWnd = CreateWindow(
szWindowClass,
szTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
if (!hWnd)
{
MessageBox(NULL,
_T(Call to CreateWindow failed!),
_T(Windows Desktop Guided Tour),
NULL);
return 1;
}
InitBezierParams(); Chemam functia care initializeaza pentru prima data punctele curbei Bezier
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
SetTimer(hWnd, IDT_COLORTIMER, colorRefresh, (TIMERPROC)NULL); Setarea TIMER NULL- ca WMD
Proc sa prelucreze evenimentul
SetTimer(hWnd, IDT_MOVETIMER, movementTrack, (TIMERPROC)NULL);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc, hdcBitmap, hdcWindow;
HBRUSH hBrush;
SHORT Wstate;
TCHAR greeting[] = _T(Programarea Pilotata pe Evenimente);
stdcout rct.x , rct.y , rct.x1 , rct.y1 stdendl;
stdcout Called WndProc stdendl; is called every time mouse moves, resize etc..
HBITMAP backgroundImage = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_APPLICA
TION)); incarcam imaginea
BITMAP bp; structura pentru imagine
GetObject(backgroundImage, sizeof(bp), &bp); copiem imaginea din handle in Bitmap
switch (message)
{
case WM_PAINT
hdc = BeginPaint(hWnd, &ps);
hdcWindow = GetWindowDC(hWnd);
SetTextColor(hdc, RGB(50, 70, 70));
SetBkMode(hdc, TRANSPARENT);
TextOut(hdc, 10, 10, greeting, _tcslen(greeting));
PolyBezier(hdc, apt, 4); draw beizer
EndPaint(hWnd, &ps);
break;
case WM_KEYDOWN
if (GetKeyState('W')) stdcout W is DOWN stdendl;
switch (wParam) 0x57 W key 0x41 A key 0x53 S key 0x44 D key
{
case 'W' 0x57
Process a W.
stdcout Pressed W stdendl;
rct.kW = true;
break;
case 'A' 0x41
Process a A.
stdcout Pressed A stdendl;
rct.kA = true;
break;
case 'S' 0x53
Process an S.
stdcout Pressed S stdendl;
rct.kS = true;
break;
case 'D' 0x44
Process a D.
stdcout Pressed D stdendl;
rct.kD = true;
break;
case VK_SHIFT 0x44
Process a D.
stdcout Pressed D stdendl;
rct.shift = true;
break;
case VK_SPACE 0x44
Process a D.
stdcout Pressed D stdendl;
rct.shift = true;
break;
case VK_CONTROL 0x44
Process a D.
stdcout Pressed D stdendl;
rct.ctrl = true;
break;
default
Process displayable characters.
stdcout Pressed wParam stdendl;
break;
}
InvalidateRect(hWnd, NULL, TRUE);
break;
case WM_KEYUP
switch (wParam) 0x57 W key 0x41 A key 0x53 S key 0x44 D key
{
case 'W' 0x57
Process a W.
stdcout Released W stdendl;
rct.kW = false;
break;
case 'A' 0x41
Process a A.
stdcout Released A stdendl;
rct.kA = false;
break;
case 'S' 0x53
Process an S.
stdcout Released S stdendl;
rct.kS = false;
break;
case 'D' 0x44
Process a D.
stdcout Released D stdendl;
rct.kD = false;
break;
case VK_SHIFT 0x44
Process a D.
stdcout Pressed D stdendl;
rct.shift = false;
break;
case VK_SPACE 0x44
Process a D.
stdcout Pressed D stdendl;
rct.shift = false;
break;
case VK_CONTROL 0x44
Process a D.
stdcout Pressed D stdendl;
rct.ctrl = false;
break;
default
Process displayable characters.
stdcout Released wParam stdendl;
break;
}
break;
case WM_DESTROY
PostQuitMessage(0);
break;
case WM_CLOSE
DeleteObject(backgroundImage);
KillTimer(hWnd, IDT_MOVETIMER); KillTimer(hWnd, IDT_COLORTIMER);
PostQuitMessage(0);
break;
case WM_TIMER
switch (wParam)
{
case IDT_COLORTIMER {
r = rand() % 255; g = rand() % 255; b = rand() % 255;
InvalidateRect(hWnd, NULL, true); ca sa redeseneze tot ce este in WM_PAINT
break;
}
case IDT_MOVETIMER {
Wstate = GetKeyState('W'); 0x57 W key 0x41 A key 0x53 S key 0x44 D key
setPos(50, 50, 200, 200);
stdcout W state Wstate stdendl;
int maxV = 10;
if (rct.kW == true)
{
if (rct.ctrl == true)
{
apt[2].y -= 10;
}
else apt[1].y -= 10;
}
if (rct.kS == true)
{
if (rct.ctrl == true)
{
apt[2].y += 6;
}
else apt[1].y += 6;
}
GetClientRect(hWnd, &clR);
if (rct.kA == true)
{
if (rct.shift == true)
{
apt[0].x = clR.right 4;
apt[0].y = clR.bottom
apt[1].x = clR.right 2;
apt[1].y = clR.bottom
apt[2].x = clR.right 2;
apt[2].y = 3 clR.bottom
apt[3].x = 3 clR.right 4;
apt[3].y = clR.bottom
}
else apt[2].x -= 10;
}
if (rct.kD == true)
{
if (rct.shift == true)
{
apt[0].x = clR.right 2;
apt[0].y = clR.bottom
apt[1].x = 3 clR.right 4;
apt[1].y = clR.bottom
apt[2].x = clR.right 4;
apt[2].y = clR.bottom
apt[3].x = clR.right 2;
apt[3].y = 3 clR.bottom
}
else apt[2].x += 6;
}
if (rct.spbar)
for (size_t i = 0; i 4; i++)
{
if(rct.kA == true)
apt[i].x--;
else if (rct.kD == true)
apt[i].x++;
else if (rct.kW == true)
apt[i].y--;
2;
4;
4;
2;
4;
2;
2;
4;
else if (rct.kS == true)
apt[i].y++;
}
InvalidateRect(hWnd, NULL, TRUE);
break;
}
default
break;
}
break;
default
return DefWindowProc(hWnd, message, wParam, lParam);
break;
}
return 0;
}
Download