AS3 建立視窗菜單

來源:互聯網
上載者:User

從官網API得到的例子

以下樣本建立在本機菜單結構
(AIR) 中顯示的菜單。

此菜單在設計上可同時用於 Windows(僅支援視窗菜單)和 Mac OS X(僅支援應用程式菜單)。為進行區分,MenuExample 類建構函式將檢查 NativeWindow 和 NativeApplication 類的靜態supportsMenu 屬性。如果 NativeWindow.supportsMenu 為 true,則該建構函式將為視窗建立
NativeMenu 對象,然後建立和添加“File”(檔案)和“Edit”(編輯)子功能表。如果NativeApplication.supportsMenu 為 true,則該建構函式將建立“File”(檔案)和“Edit”(編輯)菜單,並將它們添加到
Mac OS X 作業系統所提供的現有菜單中。

本樣本還將說明菜單事件的處理過程。select 事件在項目層級以及菜單層級進行處理。從包含所選項的菜單到根菜單的菜單鏈中的每個菜單都將響應 select 事件。displaying 事件與“Open
Recent”(最近開啟的項目)菜單一起使用。在開啟菜單之前,將以最新的 Documents 數組(在此樣本中實際上不發生更改)重新整理菜單中的項目。儘管此樣本中不顯示,但還可以在個別項目上偵聽 displaying 事件。

package {     import flash.display.NativeMenu;     import flash.display.NativeMenuItem;     import flash.display.NativeWindow;     import flash.display.Sprite;     import flash.events.Event;     import flash.filesystem.File;     import flash.desktop.NativeApplication;      public class MenuExample extends Sprite     {         private var recentDocuments:Array =              new Array(new File("app-storage:/GreatGatsby.pdf"),                       new File("app-storage:/WarAndPeace.pdf"),                       new File("app-storage:/Iliad.pdf"));                                                      public function MenuExample()         {             var fileMenu:NativeMenuItem;             var editMenu:NativeMenuItem;                          if (NativeWindow.supportsMenu){                 stage.nativeWindow.menu = new NativeMenu();                 stage.nativeWindow.menu.addEventListener(Event.SELECT, selectCommandMenu);                 fileMenu = stage.nativeWindow.menu.addItem(new NativeMenuItem("File"));                 fileMenu.submenu = createFileMenu();                 editMenu = stage.nativeWindow.menu.addItem(new NativeMenuItem("Edit"));                 editMenu.submenu = createEditMenu();             }                          if (NativeApplication.supportsMenu){                 NativeApplication.nativeApplication.menu.addEventListener(Event.SELECT, selectCommandMenu);                 fileMenu = NativeApplication.nativeApplication.menu.addItem(new NativeMenuItem("File"));                 fileMenu.submenu = createFileMenu();                 editMenu = NativeApplication.nativeApplication.menu.addItem(new NativeMenuItem("Edit"));                 editMenu.submenu = createEditMenu();             }         }                          public function createFileMenu():NativeMenu {             var fileMenu:NativeMenu = new NativeMenu();             fileMenu.addEventListener(Event.SELECT, selectCommandMenu);                          var newCommand:NativeMenuItem = fileMenu.addItem(new NativeMenuItem("New"));             newCommand.addEventListener(Event.SELECT, selectCommand);             var saveCommand:NativeMenuItem = fileMenu.addItem(new NativeMenuItem("Save"));             saveCommand.addEventListener(Event.SELECT, selectCommand);             var openRecentMenu:NativeMenuItem =                      fileMenu.addItem(new NativeMenuItem("Open Recent"));              openRecentMenu.submenu = new NativeMenu();             openRecentMenu.submenu.addEventListener(Event.DISPLAYING,                                             updateRecentDocumentMenu);             openRecentMenu.submenu.addEventListener(Event.SELECT, selectCommandMenu);                          return fileMenu;         }                  public function createEditMenu():NativeMenu {             var editMenu:NativeMenu = new NativeMenu();             editMenu.addEventListener(Event.SELECT, selectCommandMenu);                          var copyCommand:NativeMenuItem = editMenu.addItem(new NativeMenuItem("Copy"));             copyCommand.addEventListener(Event.SELECT, selectCommand);             copyCommand.keyEquivalent = "c";             var pasteCommand:NativeMenuItem =                      editMenu.addItem(new NativeMenuItem("Paste"));             pasteCommand.addEventListener(Event.SELECT, selectCommand);             pasteCommand.keyEquivalent = "v";             editMenu.addItem(new NativeMenuItem("", true));             var preferencesCommand:NativeMenuItem =                      editMenu.addItem(new NativeMenuItem("Preferences"));             preferencesCommand.addEventListener(Event.SELECT, selectCommand);                          return editMenu;         }                  private function updateRecentDocumentMenu(event:Event):void {             trace("Updating recent document menu.");             var docMenu:NativeMenu = NativeMenu(event.target);                          for each (var item:NativeMenuItem in docMenu.items) {                 docMenu.removeItem(item);             }                          for each (var file:File in recentDocuments) {                 var menuItem:NativeMenuItem =                          docMenu.addItem(new NativeMenuItem(file.name));                 menuItem.data = file;                 menuItem.addEventListener(Event.SELECT, selectRecentDocument);             }         }                  private function selectRecentDocument(event:Event):void {             trace("Selected recent document: " + event.target.data.name);         }                  private function selectCommand(event:Event):void {             trace("Selected command: " + event.target.label);         }          private function selectCommandMenu(event:Event):void {             if (event.currentTarget.parent != null) {                 var menuItem:NativeMenuItem =                         findItemForMenu(NativeMenu(event.currentTarget));                 if (menuItem != null) {                     trace("Select event for \"" +                              event.target.label +                              "\" command handled by menu: " +                              menuItem.label);                 }             } else {                 trace("Select event for \"" +                          event.target.label +                          "\" command handled by root menu.");             }         }                  private function findItemForMenu(menu:NativeMenu):NativeMenuItem {             for each (var item:NativeMenuItem in menu.parent.items) {                 if (item != null) {                     if (item.submenu == menu) {                         return item;                     }                 }             }             return null;         }     } } 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.