2013-12-22 49 views
0

在此[http://wiki.wxwidgets.org/WxMenu#PopUp-menus]示例wxMenu是一個局部變量。wx爲什麼不在這裏使用引用,以及wx的API和端口層如何交互?

然後它被指向PopupMenu的指針傳遞,現在我總是假設當我通過指針給出某個菜單時它會將其刪除(非常像面板和框架),但沒有提及http://docs.wxwidgets.org/trunk/classwx_menu.html中的複製構造函數甚至如果它是分類的話呢? (所以通過演繹它不會複製)

閱讀:http://docs.wxwidgets.org/trunk/classwx_window.html#a8f715d238cf74a845488b0e2645e98df還指出,PopupMenu函數不返回,直到菜單已經被駁回,它會是愚蠢的,如果這擋住了整個GUI,

所以我的問題是這樣的:

爲什麼PopupMenu沒有參考? wx比舊版本老,比現在在C++中標準的東西還要舊(RTTI和現在由STL提供的一些內存結構),但是引用是由於操作符超負載,受Algol68 (source,「The design and evolution的C++「)這是比90年代早期,這是當我相信wxWidgets來了。

彈出式菜單打開時有什麼約束?我想了解更多關於wx內部的知識,所以如果有人能指點我一些超棒的資源!我知道的很多關於wx的知識都是從它的行爲中推導出來的。我最初對這個爲我做圖形用戶界面的神奇黑匣子感到高興,但我對它的實際工作原理感到好奇 - (我讀過這些書:「wxWidgets中的跨平臺GUI編程」和「wxPython」 - 這些沒有覆蓋它)

在着名的wx圖層中,有wxWidgets API然後是wxWidgets Port然後是所有各種平臺特定的東西,我想更多地瞭解它們如何工作/交互。

[圖:44頁此PDF中,第8頁的書:http://ptgmedia.pearsoncmg.com/images/0131473816/downloads/0131473816_book.pdf]

回答

1

不同的問題是相當無關。 PopupMenu()由於歷史原因大多需要一個指針(所有的wxWidgets函數通常都會指向任何窗口或菜單對象)。但更新的GetPopupMenuSelectionFromUser()需要參考。然而,他們都是模態的,就是說他們在菜單被解散之前不會返回控制權。在內部,彈出式菜單運行自己的事件循環,而且,在本地GUI工具箱內部(這在Windows下絕對是這種情況),而不是wx本身,但這應該不重要。

無論如何,PopupMenu()確實不是取得傳入指針的所有權。這使您可以使用它像這樣:

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

但同樣,對於大多數的情況下,你可以使用GetPopupMenuSelectionFromUser()這更加方便。