Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
//Џа®б⥩и п 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