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

Лабы / Labs 2004 / LABOR2 / LABOR2

.CPP
Скачиваний:
21
Добавлен:
16.04.2013
Размер:
8.21 Кб
Скачать
//бва®Ё¬ Ја дЁЄ дг­ЄжЁЁ ў DOS


#define STRICT           //Їа®ўҐаЄ  WINDOWS'®ўбЄЁе 楫ле вЁЇ®ў
#include <windows.h>     //ЎҐ§ STRICT ­ ЇаЁ¬Ґа HINSTANCE -ЎҐ§§­ Є®ў®Ґ 楫®Ґ
#include <windowsx.h>    //б®  STRICT HINSTANCE - гЄ § вҐ«м
#include <math.h>
#include <stdio.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_OnPaint(HWND);


//ѓ« ў­ п дг­ЄжЁп - в®зЄ  ўе®¤  ў Їа®Ја ¬¬г
#pragma argsused      //­Ґ ўл¤®ў вм б®®ЎйҐ­Ёп ® ­ҐЁбЇ®«м§®ў ­­ле Ї а ¬Ґа е
int PASCAL WinMain(HINSTANCE hInst,        //¤ЁбЄаЁЇв®а(­®¬Ґа) Їа®Ја ¬¬л
						 HINSTANCE hPrevInstance,//­®¬Ґа ЇаҐ¤л¤г饣® нЄ§Ґ¬Ї. Їа®Ј.
						 LPSTR     lpszCmdParam, //¤®Ї®«­ЁвҐ«м­ п Ё­д®а¬ жЁп
						 int       nCmdShow)     //Ї®пў«Ґ­ЁҐ ®Є­  -min, max, ­®а¬.
{
	MSG msg;                  //бвагЄвга  ¤«п а Ў®вл б б®®ЎйҐ­Ёп¬Ё

	if(!RegisterApp(hInst))  //ॣЁбва жЁп ЇаЁ«®¦Ґ­Ёп
		return FALSE;

	if(!CreateApp(hInst,nCmdShow))  //ᮧ¤ ­ЁҐ ®Є­  ЇаЁ«®¦Ґ­Ёп
		return FALSE;

	while(GetMessage(&msg,NULL,0,0))   //жЁЄ« ®Ўа Ў®вЄЁ б®®ЎйҐ­Ё©
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
// 1) ‚ вҐзҐ­ЁЁ ¦Ё§­Ё ЇаЁ«®¦Ґ­Ёп LINE, WINDOS Ї®бл« Ґв Ґ¬г б®®ЎйҐ­Ёп,
//    Ґб«Ё зв® в® Їа®Ёб室Ёв ў бЁб⥬Ґ, ­ ЇаЁ¬Ґа ­ ¦ЁвЁҐ Є« ўЁиЁ,
//    ¤ўЁ¦Ґ­ЁҐ ¬лиЁ Ё в.¤.
// 2) ќвЁ б®®ЎйҐ­Ёп Ї®¬Ґй овбп ў ®зҐаҐ¤м, Єг¤  дг­ЄжЁп GetMessage
//    ЇаЁ ¦Ґ« ­ЁЁ ¬®¦Ґв § Ј«п­гвм.
// 3) Љ®Ј¤  дг­ЄжЁп GetMessage ўлЎЁа Ґв б®®ЎйҐ­ЁҐ Ё§ ®зҐаҐ¤Ё,
//    ®­® Ї®¬Ґй Ґвбп ў бвагЄвгаг MSG.
// 4) ќв® ᮡ饭ЁҐ § вҐ¬ ЇҐаҐ¤ Ґвбп ў дг­ЄжЁо TranslateMessage,
//    Ј¤Ґ ®Ўа Ў влў Ґвбп
// 5) ‡ вҐ¬ дг­ЄжЁп DispatchMessage ЇҐаҐ¤ Ґв б®®ЎйҐ­ЁҐ ў бЇҐжЁ «м­го
//    ®Є®­­го Їа®жҐ¤гаг, ў ­ иҐ¬ б«гз Ґ нв® WndProc
// 6) ЋЄ®­­ п Їа®жҐ¤га  WndProc ўлЇ®«­пҐв, в® зв® ¬л ў ­ҐҐ § «®¦Ё¬
// 7) “Їаў«Ґ­ЁҐ ЇҐаҐ¤ Ґвбп дг­ЄжЁЁ GetMessage, Ё ўбҐ Ї®ўв®апҐвбп.....
	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(GRAY_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, //ўЁ¤ ®Є­ , ­ ЇаЁ¬Ґа Ґб«Ё
//Ўл«® Ўл WS_OVERLAPPEDWINDOW | WS_VSCROLL ў ®Є­Ґ ¤®Ў ўЁ« бм Ўл
//ўҐавЁЄ «м­ п Ї®«®б  Їа®ЄагвЄЁ
									 CW_USEDEFAULT, //x -Є®®а¤Ё­ в  ®Є­ 
									 CW_USEDEFAULT, //y -Є®®а¤Ё­ в  ®Є­ 
									 CW_USEDEFAULT, //иЁаЁ­  ®Є­ 
									 CW_USEDEFAULT, //ўлб®в  ®Є­ 
									 NULL,          //¤ЁбЄаЁЇв®а ЇаҐ¤Є  ®Є­ 
									 NULL,          //¤ЁбЄаЁЇв®а ¬Ґ­о ¤®зҐа­ҐЈ® ®Є­ 
									 hInstance,     //¤ЁбЄаЁЇв®а нЄ§Ґ¬Ї«па  ЇаЁ«®¦Ґ­Ёп
									 NULL);         // ¤аҐб ®Є®­­ле ¤ ­­ле

	if(hwnd == NULL)
		return hwnd;

	ShowWindow(hwnd,nCmdShow);   //дг­ЄжЁп ®Ўа й Ґвбп Є WINDOWS, зв®Ўл в 
	//­ аЁб®ў «  ®Є­®, Ї® 㬮«з ­Ёо, ў ­®а¬ «м­®¬ ўЁ¤Ґ
	//Ґб«Ё nCmdShow = SW_SHOWMAXIMIZED ®Є­® Ї®пўЁвбп ў max- ўЁ¤Ґ
	UpdateWindow(hwnd);   //дгЄжЁп Ї®бЁв WINDOWS, звЎл в  Ї®б« «  ®Є­г
	//б®®ЎйҐ­ЁҐ WM_PAINT . ќв® ᮡ饭ЁҐ Ї®бл« Ґвбп ў ®Є­® ўбпЄЁ© а §,
	//Є®Ј¤  ҐЈ® ­Ґ®Ўе®¤Ё¬® ЇҐаҐаЁб®ў вм

	return hwnd;
}

//®Є®­­ п Їа®жҐ¤га , ®Ўа Ў влў ой п б®®ЎйҐ­Ёп
LRESULT CALLBACK _export WndProc(HWND hwnd, UINT msg,
											WPARAM wParam, LPARAM lParam)
{
	switch(msg)
	{
		HANDLE_MSG(hwnd,WM_DESTROY,Line_OnDestroy);  //¬ Єа®б HANDLE_MSG
//®ЇаҐ¤Ґ«Ґ­ ў § Ј®«®ў®з­®¬ д ©«Ґ windowsx.h
//Ґб«Ё WINDOWS Ї®бл« Ґв ®Є­г б®®ЎйҐ­ЁҐ WM_DESTROY, в® нв® б®®ЎйҐ­ЁҐ
//®Ўа Ў влў Ґвбп дг­ЄжЁҐ© Liner_OnDestroy
		HANDLE_MSG(hwnd,WM_PAINT, Line_OnPaint);
		default:
			return DefWindowProc(hwnd,msg,wParam,lParam);
//дг­ЄжЁп DefWindowProc ®Ўа Ў влў Ґв б®®ЎйҐ­Ёп Ї® 㬮«з ­Ёо
//нв  дг­ЄжЁп ®Ўа Ў влў Ґв Ї®звЁ ўбҐ б®®ЎйҐ­Ёп, ­ ЇаЁ¬Ґа ¤Ґ©бвўЁп ¬лимо,
//Ї® ¤Ґд®а¬ жЁЁ ®Є­ , ¬Ё­Ё§ жЁЁ ®Є­  Ё в.¤.
	}
}


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



//а §¬Ґал ®Є­  ўлў®¤  ў ¬Ёа®ў®© бЁб⥬Ґ Є®®а¤Ё­ в
double xLeft, xRight, yBottom, yTop;
//а §¬Ґал ®Є­  ўлў®¤  ў ЇЁЄбҐ«пе ­  нЄа ­Ґ ¬®­Ёв®а 
int    nLeft, nRight, mBottom, mTop;


//ЇҐаҐе®¤ ®в x Є ЇЁЄбҐ«о n
inline int xn(double x)
{
	return (x - xLeft)/(xRight - xLeft)*(nRight - nLeft) + nLeft;
}

//ЇҐаҐе®¤ ®в y Є ЇЁЄбҐ«о m
inline int ym(double y)
{
	return (y - yBottom)/(yTop - yBottom)*(mTop - mBottom) + mBottom;
}



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

//а §¬Ґал ®Є­  ў ¬Ёа®ўле Є®®а¤Ё­ в е Ё ў ЇЁЄбҐ«пе
	xLeft = -2; xRight =  10; yBottom =  -2; yTop =  2;
	nLeft = 100; nRight = 350; mBottom = 250; mTop = 50;


	HDC hdc;
	PAINTSTRUCT ps;

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

	HBRUSH hbrush;
	HPEN hpen;

	//®ЇаҐ¤Ґ«пҐ¬ ЄЁбвм: 1) бвЁ«м - бЇ«®и­®©
						  // 2) 梥⠧ Єа бЄЁ - бЁ­Ё©
	hbrush = CreateSolidBrush(RGB(0,0,200));
	SelectBrush(hdc,hbrush);   //ўлЎЁа Ґ¬ ЄЁбвм hbrush

	//®ЇаҐ¤Ґ«пҐ¬ ЇҐа®: 1) бвЁ«м - бЇ«®и­®©
						 // 2) в®«йЁ­  «Ё­Ё© - 3 ЇЁЄбҐ«Ґ©
						 // 3) 梥⠫Ё­Ё© - паЄ®-¦Ґ«вл©
	hpen = CreatePen(PS_SOLID,3,RGB(255,255,0));
	SelectPen(hdc,hpen);    //ўлЎЁа Ґ¬ ЇҐа® hpen

	Rectangle(hdc,nLeft,mBottom,nRight,mTop);

	//®ЇаҐ¤Ґ«пҐ¬ ЇҐа®: 1) бвЁ«м - бЇ«®и­®©
						 // 2) в®«йЁ­  «Ё­Ё© - 1 ЇЁЄбҐ«Ґ©
						 // 3) 梥⠫Ё­Ё© - паЄ®-Ј®«гЎ®©
	hpen = CreatePen(PS_SOLID,1,RGB(0,255,255));
	SelectPen(hdc,hpen);    //ўлЎЁа Ґ¬ ЇҐа® hpen
	int nb, ne, mb, me;
	nb = xn(xLeft); mb = ym(0);
	MoveTo(hdc,nb,mb);
	ne = xn(xRight); me = ym(0);
	LineTo(hdc,ne,me);

	nb = xn(0); mb = ym(yBottom);
	MoveTo(hdc,nb,mb);
	ne = xn(0); me = ym(yTop);
	LineTo(hdc,ne,me);


//­ §ў ­ЁҐ Ја дЁЄ  Ё ®бҐ©
	SetTextColor(hdc,RGB(255,255,255));
	SetBkColor(hdc,RGB(0,0,200));
	TextOut(hdc,(nLeft+nRight)/2-30, mTop+25, "Y = sin(X)",10);
	SetBkColor(hdc,RGB(127,127,127));
	TextOut(hdc,nLeft-35, (mBottom+mTop)/2, "Y",1);
	TextOut(hdc,(nLeft+nRight)/2, mBottom+25, "X",1);

//ўлў®¤Ё зЁб«  ў¤®«м ®бҐ©
  char ss[10];
  sprintf(ss,"%6.1lf",xLeft);
  TextOut(hdc,nLeft-30,mBottom+7,ss,6);
  sprintf(ss,"%6.1lf",xRight);
  TextOut(hdc,nRight-30,mBottom+7,ss,6);
  sprintf(ss,"%6.1lf",yBottom);
  TextOut(hdc,nLeft-55,mBottom-7,ss,6);
  sprintf(ss,"%6.1lf",yTop);
  TextOut(hdc,nLeft-55,mTop+3,ss,6);






//аЁб㥬 Ја дЁЄ бЁ­гб 
	int N = 50;
	double x, y, dx = (xRight - xLeft)/N;

	//®ЇаҐ¤Ґ«пҐ¬ ЇҐа®: 1) бвЁ«м - бЇ«®и­®©
						 // 2) в®«йЁ­  «Ё­Ё© - 1 ЇЁЄбҐ«Ґ©
						 // 3) 梥⠫Ё­Ё© - паЄ®-Єа б­л©
	hpen = CreatePen(PS_SOLID,1,RGB(255,0,0));
	SelectPen(hdc,hpen);    //ўлЎЁа Ґ¬ ЇҐа® hpen
	x = xLeft; y = sin(x);
	nb = xn(x);  mb = ym(y);
	MoveTo(hdc,nb,mb);
	for(int i=1; i<=N; i++)
	{
		x = xLeft + dx*i; y = sin(x);
		nb = xn(x); mb = ym(y);
		LineTo(hdc,nb,mb);
	}

	DeletePen(hpen);           //гЎЁа Ґ¬ ЇҐа® hpen
	DeleteBrush(hbrush);       //гЎЁа Ґ¬ ЄЁбвм hbrush

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

}

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