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

Лабы / Labs 2004 / CONTEXTS / MEMORY / GDI5P

.CPP
Скачиваний:
21
Добавлен:
16.04.2013
Размер:
6.86 Кб
Скачать
//Џа®б⥩и п WINDOWS -Їа®Ја ¬¬  б ЁбЇ®«м§®ў ­ЁҐ GDI, аЁбгҐв ®Є­®
//Ё бва®Ёв Їа®б⥩訥 дЁЈгал

#define STRICT           //Їа®ўҐаЄ  WINDOWS'®ўбЄЁе 楫ле вЁЇ®ў
#include <windows.h>     //ЎҐ§ STRICT ­ ЇаЁ¬Ґа HINSTANCE -ЎҐ§§­ Є®ў®Ґ 楫®Ґ
#include <windowsx.h>    //б®  STRICT HINSTANCE - гЄ § вҐ«м
#include <mem.h>    //б®  STRICT HINSTANCE - гЄ § вҐ«м


//Ё­вҐа䥩б
//Ё¬п Є« бб  ®Є­ 
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);
void Line_OnKey(HWND, UINT, BOOL, int, UINT);


//ѓ« ў­ п дг­ЄжЁп - в®зЄ  ўе®¤  ў Їа®Ја ¬¬г
#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(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, //ўЁ¤ ®Є­ , ­ ЇаЁ¬Ґа Ґб«Ё
//Ўл«® Ўл 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_KEYDOWN, Line_OnKey);
		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);   //§ Єалў Ґ¬ ®Є­®
}




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

	for(int size=5; size<300; size++)
	{
		Rectangle(hdc,-1,-1,601,501);
		for(int i=0; i<20; i++)
			Rectangle(hdc,i*15,i*10,i*15+size,i*10+size);
	BitBlt(hdcWin,0,0,600,500,hdc,0,0,SRCCOPY);
	}



//	BitBlt(hdcWin,0,0,400,300,hdc,0,0,SRCCOPY);
	DeleteDC(hdc);
	DeleteObject(hBitmap);

	ReleaseDC(hwnd,hdc);

}




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

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

	HDC hdc, hdcWin;
	HBITMAP hBitmap;
	hdcWin = BeginPaint(hwnd, &ps);
	hdc = CreateCompatibleDC(hdcWin);
	hBitmap = CreateCompatibleBitmap(hdcWin, 600, 500);
	SelectObject(hdc, hBitmap);

	for(int size=5; size<300; size++)
	{
		Rectangle(hdc,-1,-1,601,501);
		for(int i=0; i<20; i++)
			Rectangle(hdc,i*15,i*10,i*15+size,i*10+size);
	BitBlt(hdcWin,0,0,600,500,hdc,0,0,SRCCOPY);
	}



//	BitBlt(hdcWin,0,0,400,300,hdc,0,0,SRCCOPY);
	DeleteDC(hdc);
	DeleteObject(hBitmap);

//	ReleaseDC(hwnd,hdc);

//	for(int i=0; i<10; i++)
//		Rectangle(hdc,i*30,i*20,i*30+70,i*20+50);


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

}

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