Главная

Продолжение эпопеи с menu.

Необходимо убрать submenu из menu, которое находится в menubar. Простое удаление элемента (RemoveItem) приводило к тому, что меню прекращали открываться, а сама программа работала всё медленнее и медленнее и в конце концов висла. Программа menuworld из набора примеров с диска BeOS не помогла, потому что я в ней (к стыду признаюсь) разобраться не смог.

Узнав, что вроде бы есть баг в menubar, я решил до удаления этого submenu удалить menubar, убрать с него все меню, нужное мне меню переделать, а потом добавить все меню в новый menubar, который в самом конце я добавлю в окно (BWindow).

В результате этой попытки сложилась следующая ситуация: до удаления Submenu всё нормально. Потом программа работает, как обычно, разве что немного медленнее (хотя process controller не показывает никаких изменений в затребованных программой ресурсах процессора, а с диском программа не работает). Menubar меняется, (я пробовал добавлять туда новые меню, чтобы просто посмотреть, меняется ли menubar — да, меняется), но ни одно меню не открывается. Щелчки по menubar не дают никакого результата.

Я не могу вызвать menubar::AttachedToWindow(), потому что есть ошибка в автоматически генерируемом у меня ассемблеровском файле menubar–AttachedToWindow.asm. (Там, в ассемблере, в одной из строк не закрыта скобка). Может, проблема в этом? Если да, то создание нового класса — наследника menubar — и переписание функции AttachedToWindow должно помочь. Кто–нибудь уже пытался такое делать? (А может, просто у меня битая библиотека, из которой этот .asm–файл генерируется? Может, кто–нибудь пришлёт мне новую на shitech@not_for_spam.t2.technion.ac.il :–) («not_for_spam.» надо убрать)?

Что ещё можно сделать в такой ситуации?

Re(2):Продолжение эпопеи с menu.

в menuworld 2 меню… без добавленных item и с добавелными. просто переключаются они.

Мне это не помогает. :-(

Я не могу иметь больше одного меню, потому что это пользователь решает, какое submenu он будет удалять. На все случаи жизни по одному комплекту меню держать — памяти не напасёшься…

Почему же всё–таки перестаёт работать menubar?!

Re(2):Мне это не помогает. :-(

сейчас негде посмотреть, но я догадываюсь что это можно подглядеть в исходника deskbar
(меню программ)

Я думал об этом. Не то. :-(

У меня проблема именно с menubar. Menubar прекращает реагировать на мышку. Просто убрать одно меню из другого не представляет собой проблему. То есть, может быть, и представляет, но в первую очередь — первоочередное: как оживить menubar?

Re(2):Я думал об этом. Не то. :-(

По–сути под меню создается тред. В твоем случае,
очевидно, этот тред либо сдыхает либо саспендится.
Так что думаю, что искать надо в этом направлении.
Сейчас попробую то же самое проделать у себя… Тогда поглядим.

Эпопея закончилась. Наши победили.

Моя война с BMenu завершилась.

Проблема была не в коде, который работает с меню, а в том, что я не перерисовывал в конце BBitmap, который находился в том же окне. Как эти две вещи связаны — понятия не имею, но стоило мне перерисовать этот BBitmap, как меню тут же заработало. И удаление, и добавление submenu работает без проблем.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <i> <img> <strong> <b> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Введите перечисленные символы, чтобы мы убедились, что вы не робот. Не требуется для зарегистрированных пользователей.
f
s
N
z
7
U
Enter the code without spaces and pay attention to upper/lower case.