CClientDC dc(this);
HPEN Pen; // объявление карандаша для линий сетки
// создание карандаша с указанными параметрами (сплошной, толщина - 1,
Pen=CreatePen(PS_SOLID,1,ColorLine); // цвет выбраный пользователем
dc.SelectObject(Pen); // выбор используемого карандаша
// рисование линий сетки по х
for(int i=0;i<=Nx;i++)
{
dc.MoveTo(D+i*Sx, D); // переход карандаша в начало прямой
dc.LineTo(D+i*Sx, rec.bottom-D); // рисование прямой
}
// рисование линий сетки по у
for(int j=0;j<=Ny;j++)
{
dc.MoveTo(D ,D+j*Sy); // переход карандаша в начало прямой
dc.LineTo(rec.right-D,D+j*Sy); // рисование прямой
}
HPEN PenAxis; // объявление карандаша для осей
PenAxis=CreatePen(PS_SOLID,3,ColorLine); // создание карандаша тройной толщины
dc.SelectObject(PenAxis); // выбор используемого карандаша
int Ox,Oy; // позиция осей координат в форме
if(GridGlg.Xmin>0) Ox=D;
if(GridGlg.Xmax<0) Ox=D+Nx*Sx;
if((GridGlg.Xmax>0)&&(GridGlg.Xmin<0))
Ox=D-Sx*(int)(GridGlg.Xmin/GridGlg.Hx);
dc.MoveTo(Ox, D); // переход карандаша в начало оси Y
dc.LineTo(Ox, rec.bottom-D); // рисование оси Y
if(GridGlg.Ymin>0) Oy=D;
if(GridGlg.Ymax<0) Oy=D+Ny*Sy;
if((GridGlg.Ymax>0)&&(GridGlg.Ymin<0))
Oy=D-Sy*(int)(GridGlg.Ymin/GridGlg.Hy);
dc.MoveTo(D , Oy); // переход карандаша в начало оси X
dc.LineTo(rec.right-D , Oy); // рисование оси X
}
Создаем функцию DrawGraph в классе CGraphDlg для рисования графика
void CGraphDlg::DrawGraph()
{
// объявление экземпляра класса CClientDC для работы с клиентской областью окна
// связывает его с контекстом устройства (device context) текущего диалогового окна
CClientDC dc(this);
HPEN Pen; // объявление карандаша для линий сетки
// создание карандаша с указанными параметрами (сплошной, толщина - 3,
Pen=CreatePen(PS_SOLID,3,ColorGrid);// цвет выбраный пользователем)
dc.SelectObject(Pen); // выбор используемого карандаша
const N=100; // количество точек при построении графика
float H; // интервал между точками при построении графика
H=(GridGlg.Xmax-GridGlg.Xmin)/N;
float X=GridGlg.Xmin;
int Xs=XScreen(X);
int Ys=YScreen(F(X));
dc.MoveTo(Xs,Ys); // переход карандаша в начало оси Y
for(int i=1;i<=N;i++)
{
X+=H;
Xs=XScreen(X);
Ys=YScreen(F(X));
dc.LineTo(Xs,Ys);
}
CRect rec; // параметры клиентской области
GetClientRect(&rec); // получение параметров клиентской области
HPEN PenWhite; // объявление белого карандаша
PenWhite=CreatePen(PS_SOLID,1,0x00FFFFFF);
dc.SelectObject(PenWhite); // выбор используемого карандаша
dc.Rectangle(0,0,1300,D);
dc.Rectangle(0,rec.bottom-D+1,1300,rec.bottom);
}
float CGraphDlg::F(float x)
{
float A=ConstDlg.A;
float B=ConstDlg.B;
float C=ConstDlg.C;
float D=ConstDlg.D;
return A*(B*x+C)*(B*x+C)*(B*x+C)+D;
}
int CGraphDlg::XScreen(float x)
{
CRect rec; // параметры клиентской области
GetClientRect(&rec); // получение параметров клиентской области
return (x-GridGlg.Xmin)/(GridGlg.Xmax-GridGlg.Xmin)*(rec.right-2*D)+D;
}
int CGraphDlg::YScreen(float y)
{
CRect rec; // параметры клиентской области
GetClientRect(&rec); // получение параметров клиентской области
return (GridGlg.Ymax-y)/(GridGlg.Ymax-GridGlg.Ymin)*(rec.bottom-2*D)+D;
}
Окно программы
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.