Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2011, 23:27   #1
Flammed
 
Регистрация: 14.05.2011
Сообщений: 4
По умолчанию Переделывание Кода

вот сам код он написан на VC 6.0 нужно переделать т.к. я учусь на в Visual Studio 2005-10 там без разницы будет... вот код

Цитата:
void CGraphicWnd::OnPaint()
{
CPaintDC dc(this); // device context for painting

CRect canvas;
GetClientRect(canvas); //размеры нашего окна


// Чтобы убрать мерцание при ресайзинге рисуем на битмапе в памяти вместо рисования на экане. Дле этого
CBitmap bmp; //берём битмап
bmp.CreateCompatibleBitmap(&dc,canv as.Width(),canvas.Height()); //создаём битмап на всё окно
CDC memDC; //берём контекст для рисования в памяти
memDC.CreateCompatibleDC(&dc); //создаём контекст совместимый с экраном
const int iSave=memDC.SaveDC(); //сохраняем состояние контекста
memDC.SelectObject(&bmp); //выбираем битмап для рисования

DrawGraphicFunc(memDC,canvas,m_MinX ,m_MaxX,RGB(0,0,0),RGB(0,200,0)); //собственно рисуем график

dc.BitBlt(0,0,canvas.Width(),canvas .Height(),&memDC,0,0,SRCCOPY); //кидаем что нарисовали на окно
memDC.RestoreDC(iSave); //восстанавливаем контекст
}

double CGraphicWnd::Func(double x)
{
return ::sin(x)*x; //функция y=func(x). Подставляй любую функцию
}

void CGraphicWnd::DrawGraphicFunc(CDC &dc, CRect canvas, double minX, double maxX, COLORREF cBkGnd, COLORREF cColor)
{
if(canvas.IsRectEmpty())return;
dc.FillSolidRect(canvas,cBkGnd); //заливаем в цвет BackGround

CPen axisPen(PS_SOLID,1,RGB(127,127,127) ), //Создаём серое сплошное перо шириной 1 пиксель для осей
graphPen(PS_SOLID,1,cColor); //Создаём сплошное перо шириной 1 пиксель с цветом cColor для графика
CPen *pOldPen=dc.SelectObject(&axisPen); //Выбираем это перо и запоминаем 'старое' перо

double x,y,maxY=0,minY=0,YpPixel,
XpPixel=(maxX-minX)/canvas.Width(); //размер одного пикселя по Х
for(int n=0;n<canvas.Width();n++) //проходим окно слева направо попиксельно
{
x=minX+n*XpPixel; //вычисляем значение х на этом пикселе
y=Func(x); //вычисляем значение у на этом пикселе
if(maxY<y||!n)maxY=y; //находим максимальное
if(minY>y||!n)minY=y; //и минимальное значение у
}
if(maxY==minY)maxY++; //убеждаемся что значения не совпадают
YpPixel=(maxY-minY)/canvas.Height(); //находим размер одного пикселя по Y

CPoint pnt;
dc.SelectObject(&axisPen); //выбираем перо дря осей
if(maxY>=0.0&&minY<=0.0) // если ось X видима - рисуем её
{
pnt.y=canvas.top+(int)(maxY/YpPixel+0.5);
dc.MoveTo(canvas.left,pnt.y);
dc.LineTo(canvas.right,pnt.y);
}
if(maxX>=0.0&&minX<=0.0) // если ось Y видима - рисуем её
{
pnt.x=canvas.left+(int)(-minX/XpPixel+0.5);
dc.MoveTo(pnt.x,canvas.top);
dc.LineTo(pnt.x,canvas.bottom);
}

dc.SelectObject(&graphPen); //выбираем перо дря графика
pnt.x=canvas.left;
pnt.y=canvas.top+(int)((maxY-Func(minX))/YpPixel+0.5);
dc.MoveTo(pnt); //переходим в начало для рисования
for(n=1;n<canvas.Width();n++) //проходим окно слева направо
{
pnt.x++; //берём следующий пиксель
x=minX+n*XpPixel; //вычисляем значение X для этого пикселя
pnt.y=canvas.top+(int)((maxY-Func(x))/YpPixel+0.5); //вычисляем значение Y от Х и пиксель на экране
dc.LineTo(pnt); //собственно рисуем
}

dc.SelectObject(pOldPen); //не забываем восстановить начальное состояние
}
Flammed вне форума Ответить с цитированием
Старый 01.07.2011, 13:21   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Visual Studio 2005-10
Visual Studio - это среда разработки. Под какой язык программирования нужно?
psycho-coder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Распознавание Аски кода и скан кода MyLastHit Общие вопросы Delphi 8 06.12.2010 18:34
Улучшение кода megachuhancer Общие вопросы Delphi 5 27.01.2010 00:42
Переделывание текста Hotwire Microsoft Office Excel 11 27.08.2007 09:17
Выдернуть куски кода из html-кода trafbite Помощь студентам 7 18.08.2007 13:51