Библиотека для отображения главного и контекстных меню.
FAQ:
В первую очередь вызываем kmenu_init для задания палитры отображаемого меню.
Далее создаем объект меню используя функцию ksubmenu_new.
При помощи функций kmenuitem_new и ksubmenu_add добавляем пункты меню.
Функция kmenuitem_new понимает три типа элементов:
KMENUITEM_NORMAL - обычный пункт меню, третьим параметром kmenuitem_new примет ID кнопки, который потом пришлет библиотека по клику на этот пункт меню
KMENUITEM_SEPARATOR - рисуется разделитель
KMENUITEM_SUBMENU - пункт меню указывающий на вложенное меню, третьим параметром kmenuitem_new примет указатель на ksubmenu_t*
Для отображения главного меню окна вызываем при отрисовке окна функцию kmainmenu_draw, а также при обработке событий вызываем kmainmenu_dispatch_cursorevent.
Важно: устанавливает фильтрацию позиции курсора
Для отрисовки всплывающих контекстных меню вызываем функцию ksubmenu_draw. Обработка событий производится автономно.
Для изменения состояния пунктов меню можно изменять параметры is_enabled и is_visible объекта kmenuitem_t.
Также можно назначить свою функцию отрисовки элементов меню, изменив указатель paint объекта kmenuitem_t
libkmenu
-
- Attachments
-
-
menu.png (5.13 KiB)Viewed 12130 times
-
libkmenu.zip (10.11 KiB)Downloaded 401 times
-
Last edited by Veliant on Fri Feb 19, 2016 9:43 pm, edited 1 time in total.
Кто может добавить меню в TextEdit?
Из хаоса в космос
В принципе, я могу, но библиотеки довольно сложно подключаются, пока целостной картины не имею.
Небольшое косметическое изменение - добавлены стрелки для выпадающих подменю.
Исправлено пару багов
Исправлено пару багов
- Attachments
-
-
libkmenu.zip (11.18 KiB)Downloaded 408 times
-
Я ждал этого
Костя, может ты добавишь строку меню в TextEdit?
По крайней мере базовый вариант, дальше я или Pathoswithin.
Костя, может ты добавишь строку меню в TextEdit?
По крайней мере базовый вариант, дальше я или Pathoswithin.
Из хаоса в космос
Вот первичный задел
Правились t_edit, t_data, t_draw (draw_but_toolbar)
Для выхода из программы по пункту меню, в текущей реализации меню нельзя использовать id=1 (используетсяв внутренних целях для закрытия родительских выпадающих меню), придется назначать новый.
Правились t_edit, t_data, t_draw (draw_but_toolbar)
Для выхода из программы по пункту меню, в текущей реализации меню нельзя использовать id=1 (используетсяв внутренних целях для закрытия родительских выпадающих меню), придется назначать новый.
- Attachments
-
-
t_edit.zip (290.66 KiB)Downloaded 362 times
-
Спасибо! Я продолжу.
Из хаоса в космос
Есть бага.
Вырираешь: Файл -> Открыть -> Открывается OpenDialog.
При этом пункт меню "Файл" исчезает http://prntscr.com/7zxaaq
Вырираешь: Файл -> Открыть -> Открывается OpenDialog.
При этом пункт меню "Файл" исчезает http://prntscr.com/7zxaaq
Из хаоса в космос
Мой косяк. На скорую руку делал.Leency wrote:Есть бага.
Вырираешь: Файл -> Открыть -> Открывается OpenDialog.
При этом пункт меню "Файл" исчезает http://prntscr.com/7zxaaq
Code: Select all
stdcall [kmainmenu_draw], [main_menu]
Да и весь код
Code: Select all
stdcall [kmenu_init], sc
stdcall [ksubmenu_new]
mov [main_menu], eax
stdcall [ksubmenu_new]
mov [main_menu_file], eax
stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_New, 3
stdcall [ksubmenu_add], [main_menu_file], eax
stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_Open, 4
stdcall [ksubmenu_add], [main_menu_file], eax
stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_Save, 5
stdcall [ksubmenu_add], [main_menu_file], eax
stdcall [kmenuitem_new], KMENUITEM_SEPARATOR, 0, 0
stdcall [ksubmenu_add], [main_menu_file], eax
stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_Exit, 1
stdcall [ksubmenu_add], [main_menu_file], eax
stdcall [kmenuitem_new], KMENUITEM_SUBMENU, sz_main_menu_File, [main_menu_file]
stdcall [ksubmenu_add], [main_menu], eax
Code: Select all
;проверка на сколько удачно загузились библиотеки
Исходники будут?
to infinity and beyond
Сорцы + используемый самописный фреймворк
- Attachments
-
-
menu_src.zip (71.36 KiB)Downloaded 501 times
-
Исправил утечку памяти при отрисовке
- Attachments
-
-
kmenu.obj (23.97 KiB)Downloaded 354 times
-
Вопрос.
Перевожу icon на библиотеку kmenu. Всё отлично, меню появляется. Но одно но. Никак не получается принять инфу о нажатии пункта меню. Не приходит сообщение о нажатии кнопки.
Вот так создал меню:
Приём сообщений 3 разблокирован. Всё как надо, все сообщения приходят. Но не кнопки.
Перевожу icon на библиотеку kmenu. Всё отлично, меню появляется. Но одно но. Никак не получается принять инфу о нажатии пункта меню. Не приходит сообщение о нажатии кнопки.
Вот так создал меню:
Spoiler:
Code: Select all
;это в инициализации icon
mcall 48,3,sc,40
invoke kmenu_init,sc
invoke ksubmenu_new
mov [hMenu],eax
...
invoke kmenuitem_new, KMI_NORMAL,RMenuAlign,MII_ALIGN
invoke ksubmenu_add,[hMenu],eax
... ; это вызываю при клике правой кнопкой
invoke ksubmenu_draw,[hMenu],posRMenu
Spoiler:
Code: Select all
mcall 40,01100100b ;нужны только события мыши и IPC и кнопок(меню п.к.м.),
;перерисовка иконок будет в другом потоке
messages:
mcall 10
cmp eax,3
je MSGBtn
cmp eax,6
jz MSGMouse
cmp eax,7
jz MSGIPC
jmp messages
MSGBtn:
mcall 17
call rb_onBtn
jmp messages
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Посмотри реализацию в textEdit, может поможет.
rev 5649
rev 5649
Из хаоса в космос
Хм. У меня главное окно - рабочий стол: PID 1, слот 1, размеры окна 0,0. Оно точно будет активизироваться, чтобы получить сообщение? Или может ещё что-то.
И ещё. Нашёл баг. Если кликнуть близко к нижней границе экрана, то пункт выделяется не тот, что под мышью(даже если поводить мышью):
И ещё. Нашёл баг. Если кликнуть близко к нижней границе экрана, то пункт выделяется не тот, что под мышью(даже если поводить мышью):
Spoiler:
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Who is online
Users browsing this forum: No registered users and 2 guests