Почему wx не использует здесь ссылку, и как взаимодействуют уровни API и порта wx?

0

В этом примере [ http://wiki.wxwidgets.org/WxMenu#PopUp-menus ] wxMenu является локальной переменной.

Затем он передается указателем на PopupMenu, теперь я всегда предполагаю, что когда я даю что-то меню по указателю, он удалит его для меня (как панели и фреймы), нет упоминания о конструкторе копирования в http://docs.wxwidgets.org/trunk/classwx_menu.html и даже в этом случае, если он был подклассифицирован? (поэтому путем вычитания он не копирует)

Чтение: http://docs.wxwidgets.org/trunk/classwx_window.html#a8f715d238cf74a845488b0e2645e98df также указывает, что функция PopupMenu не возвращается до тех пор, пока меню не будет уволено, было бы глупо, если бы это заблокировало весь графический интерфейс,

Поэтому мой вопрос таков:

Почему PopupMenu не ссылается? wx старая, старше, чем некоторые из стандартных функций в C++ (RTTI и некоторые структуры памяти, которые теперь предоставляются STL, например), но ссылки возникли из-за перегрузки оператора, вдохновленного Algol68 (источник, "Дизайн и эволюция C++ "), которая старше, чем в начале 90-х годов, когда я верю, что wxWidgets стал.

Какие существуют ограничения во всплывающем меню? Я хотел бы узнать больше о wx-компонентах, поэтому, если кто-нибудь может указать мне на некоторые ресурсы, которые были бы превосходными! Многие из того, что я знаю о wx, были выведены из того, как он действует. Сначала я был счастлив этим волшебным черным ящиком, который делал GUI для меня, но мне так любопытно, как это работает на самом деле (я читал книги: "Кросс-платформенное графическое программирование в wxWidgets" и "wxPython" - эти дон не закрывайте его)

В известных слоях wx-диаграмм есть wxWidgets API ниже, чем wxWidgets Port затем все различные специфические для платформы вещи, я хотел бы узнать больше о том, как они работают/взаимодействуют.

[диаграмма: стр. 44 в этом PDF, стр. 8 в книге: http://ptgmedia.pearsoncmg.com/images/0131473816/downloads/0131473816_book.pdf ]

Теги:
wxwidgets

1 ответ

1

Различные вопросы довольно не связаны. PopupMenu() берет указатель в основном по историческим причинам (все функции wxWidgets обычно принимают указатели на любое окно или объекты меню). Но новый GetPopupMenuSelectionFromUser() принимает ссылку. Тем не менее, оба они являются модальными, в том смысле, что они не возвращают контроль до тех пор, пока меню не будет уволено. Внутри всплывающие меню запускают собственный цикл событий, который, кроме того, внутри встроенного инструментария GUI (это, безусловно, относится к Windows), а не самого wx, но это не имеет большого значения.

В любом случае PopupMenu() не получает права собственности на переданный в указателе. Это позволяет использовать его следующим образом:

void Foo() {
    wxMenu menu;
    menu.Append(...);
    window->PopupMenu(&menu);
}

Но, опять же, для большинства случаев вы можете просто использовать GetPopupMenuSelectionFromUser() что еще более удобно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню