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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

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

Не Знал как правельно назвать, но мне нужно помощь в переделование, я запутался пока делал... вот код нужно преобразовать его чтобы было понятно на Visual Studio 2005 года

PHP код:
void CGraphicWnd::OnPaint() 
{
        
CPaintDC dc(this); // device context for painting
 
        
CRect canvas;
        
GetClientRect(canvas);                                  //размеры нашего окна
 
 
        //              Чтобы убрать мерцание при ресайзинге рисуем на битмапе в памяти вместо рисования на экане. Дле этого
        
CBitmap bmp;                                                    //берём битмап
        
bmp.CreateCompatibleBitmap(&dc,canvas.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 &dcCRect canvasdouble minXdouble maxXCOLORREF cBkGndCOLORREF 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 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переделка шаблонов ! ! ! Fanat31 WordPress и другие CMS 2 22.01.2011 12:42
Переделка с TThread на Beginthread bulldog5293 Общие вопросы Delphi 2 23.09.2010 17:24
Переделка программы по массиву IDakar Помощь студентам 0 26.11.2009 16:54
Переделка кода hen Общие вопросы C/C++ 6 24.10.2009 17:58