Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / Labs 2004 / LAB4 / BC31 / PAINT_T

.CPP
Скачиваний:
22
Добавлен:
16.04.2013
Размер:
5.67 Кб
Скачать
//Їа®Ја ¬¬  аЁбгҐв ¤ўЁ¦г饥бп ⥫®
//ЇҐаҐаЁб®ўЄ  ў ¬®¬Ґ­в ЇаЁе®¤  бЁЈ­ «  ®в в ©¬Ґа 
//®бв ­®ўЄ  Ё Їа®¤®«¦Ґ­ЁҐ ЇаЁ ­ ¦ вЁЁ «оЎ®© Є« ўЁиЁ
//Є®­вҐЄбв гбва®©бвў  Ї®«гз Ґвбп Ё ®в¤ Ґвбп б Ї®¬®ймо дг­ЄжЁ©
//  BeginPaint()   --->    EndPaint(hwnd, &ps)


#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_OnPaint(HWND);
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);
}



//‘®§¤ ­ЁҐ ®Є­  ЇаЁ«®¦Ґ­Ёп (аЁб®ў ­ЁҐ ®Є­ )
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_PAINT, Line_OnPaint);
		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);   //§ Єалў Ґ¬ ®Є­®
}
int hx=0, hy=0;


//дг­ЄжЁп ®Ўа Ў влў ой п б®®ЎйҐ­ЁҐ WM_TIMER
#pragma argsused
void Line_OnTimer(HWND hwnd, UINT id)
{
	InvalidateRect(hwnd,NULL,TRUE);
}



//дг­ЄжЁп ®Ўа Ў влў ой п б®®ЎйҐ­ЁҐ 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;
	}
}


//дг­ЄжЁп ®Ўа Ў влў ой п б®®ЎйҐ­ЁҐ WM_PAINT
void Line_OnPaint(HWND hwnd)
{
	HDC hdc;
	PAINTSTRUCT ps;

	hdc = BeginPaint(hwnd, &ps);  //Ї®«гз Ґ¬ Є®­вҐЄбв

	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

	EndPaint(hwnd, &ps);      //®бў®Ў®¦¤ Ґ¬ Є®­вҐЄбв

}

Соседние файлы в папке BC31