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

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

.CPP
Скачиваний:
22
Добавлен:
16.04.2013
Размер:
4.94 Кб
Скачать
//Їа®Ја ¬¬  аЁбгҐв ¤ўЁ¦г饥бп ⥫®
//ЇҐаҐаЁб®ўЄ  ў ¬®¬Ґ­в ­ ¦ вЁп «оЎ®© Є« ўЁиЁ
//Є®­вҐЄбв гбва®©бвў  Ї®«гз Ґвбп Ё ®в¤ Ґвбп б Ї®¬®ймо дг­ЄжЁ©
//  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*);


//ѓ« ў­ п дг­ЄжЁп - в®зЄ  ўе®¤  ў Їа®Ја ¬¬г
#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);
		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;
}




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

	return TRUE;
}




//дг­ЄжЁп ®Ўа Ў влў ой п б®®ЎйҐ­ЁҐ WM_DESTROY
#pragma argsused
void Line_OnDestroy(HWND hwnd)
{
	PostQuitMessage(0);   //§ Єалў Ґ¬ ®Є­®
}


//дг­ЄжЁп ®Ўа Ў влў ой п б®®ЎйҐ­ЁҐ WM_KEYDOWN
#pragma argsused
void Line_OnKey(HWND hwnd, UINT, BOOL, int, UINT)
{
	HDC hdc = GetDC(hwnd);

	HBRUSH hbrush;
	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);

}


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