Тест gui элементов
Posted: Sat Jul 18, 2015 2:08 am
Здесь буду выслушивать идеи/рекомендации/баги элементов
я из исходника лексер не убрал, + парсер css. И еще много чего. И без сжатия kpackYason wrote:Дожили... Простое окно, с простой кнопкой - 8kb весит!
Code: Select all
// код инициализации из примера
kmenu_init(&theme);
menu = ksubmenu_new();
ksubmenu_add(menu, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 3", KMENUITEM_ID(3)));
ksubmenu_add(menu, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 4", KMENUITEM_ID(4)));
ksubmenu_add(menu, kmenuitem_new(KMENUITEM_SEPARATOR, NULL, NULL));
ksubmenu_add(menu, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 5", KMENUITEM_ID(5)));
ksubmenu_add(menu, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 6", KMENUITEM_ID(6)));
submenu1 = ksubmenu_new();
ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 3", KMENUITEM_ID(3)));
ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 4", KMENUITEM_ID(4)));
ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_SEPARATOR, NULL, NULL));
ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 5", KMENUITEM_ID(5)));
ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 6", KMENUITEM_ID(6)));
ksubmenu_add(menu, kmenuitem_new(KMENUITEM_SUBMENU, "submenu", submenu1));
submenu2 = ksubmenu_new();
ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 3", KMENUITEM_ID(3)));
ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 4", KMENUITEM_ID(4)));
ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_SEPARATOR, NULL, NULL));
ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 5", KMENUITEM_ID(5)));
ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 6", KMENUITEM_ID(6)));
ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_SUBMENU, "submenu", submenu2));
Не плохо, может лучше меню без создания нового процесса, а с помощью прорисовки?Veliant wrote:Дабы не разводить лишние темы, пример реализации контекстного меню. Есть какие-нибудь замечания?
P.S.
Добавил вариант ввиде obj-библиотеки.
Как использовать
1) Вызываем kmenu_init и передаем ей структуру полученную через 48.3 (позже изменю архитектуру)
2) Создаем используя функцию ksubmenu_new нужное количество объектов меню.
3) Создаем и добавляем к меню новые элементы используя ksubmenu_add в паре с kmenuitem_new.
Функция kmenuitem_new понимает три типа элементов:
KMENUITEM_NORMAL - обычный пункт меню, третьим параметром kmenuitem_new примет ID кнопки, который потом пришлет библиотека по клику на этот пункт меню
KMENUITEM_SEPARATOR - рисуется разделитель
KMENUITEM_SUBMENU - пункт меню указывающий на вложенное меню, третьим параметром kmenuitem_new примет указатель на ksubmenu_t*
4) Для отображения меню вызвать функцию ksubmenu_draw, указав ей какое меню и в каких координатах вывести. Последний параметр всегда 0.
Для изменения состояния пунктов меню можно изменять параметры is_enabled и is_visible объекта kmenuitem_t.Code: Select all
// код инициализации из примера kmenu_init(&theme); menu = ksubmenu_new(); ksubmenu_add(menu, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 3", KMENUITEM_ID(3))); ksubmenu_add(menu, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 4", KMENUITEM_ID(4))); ksubmenu_add(menu, kmenuitem_new(KMENUITEM_SEPARATOR, NULL, NULL)); ksubmenu_add(menu, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 5", KMENUITEM_ID(5))); ksubmenu_add(menu, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 6", KMENUITEM_ID(6))); submenu1 = ksubmenu_new(); ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 3", KMENUITEM_ID(3))); ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 4", KMENUITEM_ID(4))); ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_SEPARATOR, NULL, NULL)); ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 5", KMENUITEM_ID(5))); ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 6", KMENUITEM_ID(6))); ksubmenu_add(menu, kmenuitem_new(KMENUITEM_SUBMENU, "submenu", submenu1)); submenu2 = ksubmenu_new(); ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 3", KMENUITEM_ID(3))); ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 4", KMENUITEM_ID(4))); ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_SEPARATOR, NULL, NULL)); ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 5", KMENUITEM_ID(5))); ksubmenu_add(submenu2, kmenuitem_new(KMENUITEM_NORMAL, "ButtonID 6", KMENUITEM_ID(6))); ksubmenu_add(submenu1, kmenuitem_new(KMENUITEM_SUBMENU, "submenu", submenu2));
Также можно назначить свою функцию отрисовки элементов меню, изменив указатель paint объекта kmenuitem_t
Управление мышкой и клавишами курсора + esc/enter
где можно найти код этих классов?pavelyakov wrote:инициализация в Си
button b;
b.click = #onMouseClick;
b.up = #onMouseUp;
b.down = #onMouseDown;
b.move = #onMouseMove;
b.caption = "test";
b.style = "width:150;height:20;top:30;left:30;";
b.create();