Создание графической библиотеки с нуля - страница 15

 
В остальном все классно, продолжайте.
 
Для Вас, создать элементы управления на канвасе очень просто:

1. Вынимаете несколько рисующих функций из класса канвас, а именно: вертикальная линия, гор.линия. прямоугольник, залитый прямоугольник, текст.

2. Для рисования каждого элемента пишите функцию: void Button(), void Checkbox()... и т.д.

3. В Функции рисования элементов включаете наборы вызовов рисующих функций (линии, прямоуг.), которыми "начертите" на нужном канвасе структуру нужного элемента управления.

4. Экземпляр каждого созданного элемента должен быть привязан к своему окну.

5. Свойства каждого созданного экземпляра (тек. Х, Y, X_SIZE, Y_SIZE...) должны сохрянятся в массиве или структуре, чтобы другие функции могли их читать/менять.

Ну, а дальше по накатанной дорожке пойдете....)

И все это на канвасе, заметьте.

 
А если нужны другие объекты, которые могут быть под объектом, который нарисован на главном фоне?
 
Aliaksandr Hryshyn:
А если нужны другие объекты, которые могут быть под объектом, который нарисован на главном фоне?
Дайте пример. Есть много разных ситуаций с различными решениями.
 
Реter Konow:
Дайте пример. Есть много разных ситуаций с различными решениями.

В моей ситуации, скорее всего, канваса достаточно, думаю, что так и сделаю как вы посоветовали.

Тем более, что уже есть минимальная поддержка канваса
 
Каждое окно - отдельный, самостоятельный канвас. 

Создать окно не менее просто чем остальные элементы:

1. Окно имеет простые базовые свойства нескольких обычных прямоугольников, которые последовательно рисуются на созданном канвасе вызовами функции FilledRectangle() (из класса CCanvas) и передачей в них шаблонных или польз.значений. 

2. Окно рисуется до его элементов. За это отвечает спец.функция рисования окна Draw_window(x, y, w, h); например, что вызовет FilledRectangle() нужное кол-во раз, для построит конструкцию окна.

3. Затем, вызываются функции рисующие элементы управления. Каждый строится подобно окну - из последовательно рисуемых прямоугольников и рамок. 

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

Функция, ловящая событие нахождения курсора над координатами рисованного элемента, что на каждом событии перемещения курсора делает цикл по координатам всех рисованных и явленных элементов в этом окне и находит тот, что прямо под ним.

Функция, фиксирующая событие нажатия/отжатия на элемент под курсором и переключающая его состояние (если он интерактивен) вызовом другой функции, меняющей значения параметров того элемента (цвет, иконка...) и перерисовывающая его заново.

Для начала, этого достаточно.

 
Roman:

Для HFT,  3D думаю будет полезно при создании графического анализа объемов стакана и потока ордеров.
Но как интерпретировать такую информацию, не вникал.

где такое есть ?

 
Существует несколько категорий элементов управления, среди которых можно выделить две основные: 

1. Декоративные - линии, рамки, прямоугольники, иконки...

2. "Параметрические" - т.е. обладающие параметром.

Второй тип представляется двумя подкатегориями:

1. Элементы ввода - обеспечивают возможность менять значение графическими "механизмами" разработанными под разные типы параметров. Эти элементы делятся на несколько групп, например логическое состояние true/false (bool) устанавливает кнопка, чекбокс и радио-кнопка, а значение параметра с границами диапазона и шагом управляется слайдером или полем ввода. На каждый тип параметра имеется несколько однотипных элементов позволяющих похожим образом менять его значение.

2. Элементы вывода - транслируют значение в числовом, текстовом или в другом, графически преобразованном виде. Среди них: ячейки таблиц, текстовые метки, прогресс бары. Индикаторы и графики также относятся к этой категории, а их отличие в лишь приспособленности к большим обьемам выводимых данных.


Как я говорил ранее, рисовать элементы - простое и незамысловатое дело. По сути, это лишь разметка массива значениями. Все функции имеются в классе CCanvas - линии, прямоугольники, рамки. Функциям нужно только передать массив, который потом сохранить в ресурсе и подключить к обьекту BITMAP_LABEL с помощью свойства OBJPROP_BMPFILE.

Обертка этого класса мешает, как собаке пятая нога. (Наверное, потому никто не сделал до сих пор библиотеки на канвасе, т.к. сверху сказали: "на корове ездить только с седлом!". ;)).