Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
//Їа®Ја ¬¬ аЁбгҐв ¤ўЁ¦г饥бп ⥫®
//ЇҐаҐаЁб®ўЄ ў ¬®¬Ґв ЇаЁе®¤ бЁЈ « ®в в ©¬Ґа
//®бв ®ўЄ Ё Їа®¤®«¦ҐЁҐ ЇаЁ ¦ вЁЁ «оЎ®© Є« ўЁиЁ
//Є®вҐЄбв гбва®©бвў Ї®«гз Ґвбп Ё ®в¤ Ґвбп б Ї®¬®ймо дгЄжЁ©
// GetDC() ---> ReleaseDC()
#define STRICT
#include <windows.h>
#include <windowsx.h>
#include <math.h>
//ЁвҐа䥩б
//Ё¬п Є« бб ®Є
char const szClassName[] = "LineClass";
//§ Ј®«®ў®Є ®Є
char const szWindowTitle[] = "Line";
//Їа®в®вЁЇл дгЄжЁ©
BOOL RegisterApp(HINSTANCE hInst);
HWND CreateApp(HINSTANCE, int);
LRESULT CALLBACK _export WndProc(HWND, UINT, WPARAM, LPARAM);
void Line_OnDestroy(HWND);
void Line_OnKey(HWND, UINT, BOOL, int, UINT);
BOOL Line_OnCreate(HWND,CREATESTRUCT FAR*);
void Line_OnTimer(HWND hwnd, UINT id);
//ѓ« ў п дгЄжЁп - в®зЄ ўе®¤ ў Їа®Ја ¬¬г
#pragma argsused
int PASCAL WinMain(HINSTANCE hInst,
HINSTANCE hPrevInstance,
LPSTR lpszCmdParam,
int nCmdShow)
{
MSG msg; //бвагЄвга ¤«п а Ў®вл б б®®ЎйҐЁп¬Ё
if(!RegisterApp(hInst)) //ॣЁбва жЁп ЇаЁ«®¦ҐЁп
return FALSE;
if(!CreateApp(hInst,nCmdShow)) //ᮧ¤ ЁҐ ®Є ЇаЁ«®¦ҐЁп
return FALSE;
while(GetMessage(&msg,NULL,0,0)) //жЁЄ« ®Ўа Ў®вЄЁ б®®ЎйҐЁ©
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//ђҐЈЁбва жЁп Є« бб ®Є
BOOL RegisterApp(HINSTANCE hInst)
{
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW; //бвЁ«м ®Є
wc.lpfnWndProc = WndProc; //Ё¬п ®Є®®© Їа®жҐ¤гал
wc.cbClsExtra = 0; //¤®Ї®«ЁвҐ«млҐ ¤ лҐ
wc.cbWndExtra = 0; //®Ў ®ЄҐ
wc.hInstance = hInst; //¤ЁбЄаЁЇв®а(®¬Ґа) ЇаЁ«®¦ҐЁп
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); //ЇЁЄв®Ја ¬¬ (ЁЄ®Є )
wc.hCursor = LoadCursor(NULL, IDC_ARROW); //д®а¬ Єгаб®а (бв५Є )
wc.hbrBackground = GetStockBrush(WHITE_BRUSH); //梥⠮Є
wc.lpszMenuName = "APP_MENU"; //Ё¬п ¬Ґо ®Є
wc.lpszClassName = szClassName; //Ё¬п Є« бб ®Є
return RegisterClass(&wc); //дгЄжЁп ЇҐаҐ¤ Ґв Ёд®а¬ жЁо ® Є« ббҐ
} //®Є 襣® ЇаЁ«®¦ҐЁп ў WINDOWS,
//Ј¤Ґ Їа®Ёб室Ёв ҐЈ® ॣЁбва жЁп
//‘®§¤ ЁҐ ®Є ЇаЁ«®¦ҐЁп (аЁб®ў ЁҐ ®Є )
HWND CreateApp(HINSTANCE hInstance, int nCmdShow)
{
HWND hwnd; //Ё¤ҐвЁдЁЄ в®а ®Є ЇаЁ«®¦ҐЁп
hwnd = CreateWindow(szClassName, //Ё¬п Є« бб ®Є
szWindowTitle, //§ Ј®«®ў®Є ®Є
WS_OVERLAPPEDWINDOW, //ўЁ¤ ®Є , ЇаЁ¬Ґа Ґб«Ё
CW_USEDEFAULT, //x -Є®®а¤Ё в ®Є
CW_USEDEFAULT, //y -Є®®а¤Ё в ®Є
CW_USEDEFAULT, //иЁаЁ ®Є
CW_USEDEFAULT, //ўлб®в ®Є
NULL, //¤ЁбЄаЁЇв®а ЇаҐ¤Є ®Є
NULL, //¤ЁбЄаЁЇв®а ¬Ґо ¤®зҐаҐЈ® ®Є
hInstance, //¤ЁбЄаЁЇв®а нЄ§Ґ¬Ї«па ЇаЁ«®¦ҐЁп
NULL); // ¤аҐб ®Є®ле ¤ ле
if(hwnd == NULL)
return hwnd;
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
return hwnd;
}
//®Є® п Їа®жҐ¤га , ®Ўа Ў влў ой п б®®ЎйҐЁп
LRESULT CALLBACK _export WndProc(HWND hwnd, UINT msg,
WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
HANDLE_MSG(hwnd,WM_CREATE, Line_OnCreate);
HANDLE_MSG(hwnd,WM_DESTROY,Line_OnDestroy);
HANDLE_MSG(hwnd,WM_KEYDOWN, Line_OnKey);
HANDLE_MSG(hwnd,WM_TIMER, Line_OnTimer);
default:
return DefWindowProc(hwnd,msg,wParam,lParam);
}
}
//Ј«®Ў «млҐ ЇҐаҐ¬ҐлҐ
double x1, x2, y1, y2;
int n1, n2, m1, m2;
int iStep = 0;
//ЇҐаҐе®¤ ®в x Є ЇЁЄбҐ«о n
inline int xn(double x)
{
return (int)((x - x1)/(x2 - x1)*(n2 - n1)) + n1;
}
//ЇҐаҐе®¤ ®в y Є ЇЁЄбҐ«о m
inline int ym(double y)
{
return (int)((y - y1)/(y2 - y1)*(m2 - m1)) + m1;
}
//д« Ј ®бв ®ўЄЁ Ё § ЇгбЄ в ©¬Ґа
int LineStop;
//дгЄжЁп ®Ўа Ў влў ой п б®®ЎйҐЁҐ WM_CREATE
#pragma argsused
BOOL Line_OnCreate(HWND hwnd, CREATESTRUCT FAR* )
{
x1 = -2; x2 = 2; y1 = -2; y2 = 2;
n1 = 50; n2 = 450; m1 = 450; m2 = 50;
if(!SetTimer(hwnd, 1, 500, NULL))
{
MessageBox(hwnd, "No Timers Available", "Snake Info", MB_OK);
return FALSE;
}
LineStop = 1;
return TRUE;
}
//дгЄжЁп ®Ўа Ў влў ой п б®®ЎйҐЁҐ WM_DESTROY
#pragma argsused
void Line_OnDestroy(HWND hwnd)
{
KillTimer(hwnd, 1);
PostQuitMessage(0); //§ Єалў Ґ¬ ®Є®
}
//дгЄжЁп ®Ўа Ў влў ой п б®®ЎйҐЁҐ WM_TIMER
#pragma argsused
void Line_OnTimer(HWND hwnd, UINT id)
{
HDC hdc = GetDC(hwnd);
HPEN hpen;
MoveTo(hdc,n1,m1);
LineTo(hdc,n2,m1);
LineTo(hdc,n2,m2);
LineTo(hdc,n1,m2);
LineTo(hdc,n1,m1);
//®ЇаҐ¤Ґ«пҐ¬ ЇҐа®: 1) бвЁ«м - бЇ«®и®©
// 2) в®«йЁ «ЁЁ© - 3 ЇЁЄбҐ«Ґ©
// 3) 梥⠫ЁЁ© - Єа бл©
hpen = CreatePen(PS_SOLID,3,RGB(255,0,0));
SelectPen(hdc,hpen); //ўлЎЁа Ґ¬ ЇҐа® hpen
double dfi, dr, xb, yb, xe, ye;
dfi = 10, dr = 0.2;
xb = 0, yb = 0;
xe = dr*iStep*cos(M_PI/180*dfi*iStep);
ye = dr*iStep*sin(M_PI/180*dfi*iStep);
int nb, mb, ne, me;
nb = xn(xb); mb = ym(yb);
ne = xn(xe); me = ym(ye);
MoveTo(hdc,nb,mb);
LineTo(hdc,ne,me);
iStep++;
DeletePen(hpen); //гЎЁа Ґ¬ ЇҐа® hpen
ReleaseDC(hwnd,hdc);
}
//дгЄжЁп ®Ўа Ў влў ой п б®®ЎйҐЁҐ WM_KEYDOWN
#pragma argsused
void Line_OnKey(HWND hwnd, UINT, BOOL, int, UINT)
{
if(LineStop == 1)
{
KillTimer(hwnd, 1);
LineStop = 0;
}
else
{
SetTimer(hwnd, 1, 500, NULL);
LineStop = 1;
}
}