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