Форум программистов, компьютерный форум CyberForum.ru

Простой класс для построения графиков функции WinAPI - C++

Восстановить пароль Регистрация
 
loou
1 / 1 / 0
Регистрация: 02.08.2013
Сообщений: 29
20.12.2013, 09:54     Простой класс для построения графиков функции WinAPI #1
Выкладываю свой простенький класс для построения графика в окне.
Может кому полезен будет. Он конечно кривоват и функционала мало.
Зато предельно прост.

Ну и критика приветствуется

Использование класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 cPlot Plot; // объявление
 
//.....................
// Там где окно уже создано
double Pos[]={0.0, 0.0, 0.5, 0.5}, // позиция графика в окне в относительных единицах {x1,y1,x2,y2}
       Scale[]={0.0, 0.0, 10.0, 2.0}; // Шкала по X и Y в формате {x1,y1,x2,y2}
 
Plot.Set(hWnd, Pos, Scale); // Можно Pos и Scale опустить, будут использованы значения по умолчанию
 
//.....................
// Гденибудь где нужно задать или изменить данные которые выводяться на график
double X[]={ 0,  1,   2,  3,  4,  5,  6,  7,  8},
       Y[]={ 1,  0, -1,  0,  1,  0, -1,  0,  1};
 
Plot.SetData(X,9,Y,9); // 9 длина массивов, NX=NY, но NX или NY может быть равна 2 тогда X или Y считается линейной
 
// То же самое, что выше но требует меньше памяти и работает быстрее
double X1[]={ 0,  1},
       Y1[]={ 1,  0, -1,  0,  1,  0, -1,  0,  1};
 
Plot.SetData(X,2,Y,9); // X линейная X0=X[0], Xn=X[0]+(X[1]-X[0])*n, !!! при X[1]-X[0] < 0 не работает !!! просто не реализованно 
// или можно вот так
Plot.SetData(Y,9,X,2); 
 
// Отрисовка графика в оконной функции
   case WM_PAINT: {
      hdc = BeginPaint(hWnd, &ps);
      // TODO: Add any drawing code here...
      Plot.Draw(); // Отрисовка графика; 
      EndPaint(hWnd, &ps);
      } break;
 
// Изменение шкалы, например по колесику мыши
   case WM_MOUSEWHEEL: {
      int N; double dX, Scale[4];
      Plot.GetScale(Scale);
      
      wheelDelta += GET_WHEEL_DELTA_WPARAM(wParam);
      N=wheelDelta/WHEEL_DELTA; wheelDelta-=N*WHEEL_DELTA; 
 
      dX=0.1*(Scale[2]-Scale[0])*N;
      Scale[0]-=dX; Scale[2]-=dX;
 
      Plot.SetScaleX(Scale); // или SetScaleY
      } break;
 
// Сохранение относительных размеров графика при изменении размера окна
   case WM_SIZE: {
      Plot.SetPosX(); // Устанавливает положение по горизонтали в окне по текущему Pos в относительных единицах
      Plot.SetPosY(); // то-же по вертикали, Если нужно изменить положение Plot.SetPosX(Pos),
      } break;           // если нужно установить в пикселях Plot.SetPPosX(PPos)
 
// Подписи к осям по умолчанию X и Y
SetXLabel(_T("X Scale")); // void SetXLabel(TCHAR *tcLabel) и так же для Y
Вложения
Тип файла: rar cPlot.rar (5.8 Кб, 22 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2013, 09:54     Простой класс для построения графиков функции WinAPI
Посмотрите здесь:

простой класс C++
Создать шаблон функции для построения очереди C++
C++ Создать класс, в котором реализовать функции для работы с одномерными массивами
Создание WinApi функции для нахождения максимального элемента массива в нескольких потоках C++
Поиск простой библиотека для построения простых 2D графиков C++
C++ Используя производные классы, определить класс параметризованного списка одного из следующих типов. Применить его для построения списка объектов указа
Библиотеки для построения графика функции C++
Нужно создать самый простой класс (С++) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 13:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru