Apollo ウインドウに最大/最小化と閉じるボタンを追加

Apollo アプリケーションのウインドウは NativeWindow というクラスのインスタンスです。この NativeWindow クラスの API を使うとウインドウを閉じたり最大化したりできます。

NativeWindow クラス

DisplayObject のインスタンス (画面に表示されるオブジェクトは基本的にみんなそうです) であれば、自身が所属する表示領域を stage 属性に持っています。この stage 属性から stage を表示している NativeWindow オブジェクトを取得することができます。

// DisplayObject のインスタンス内では以下の記述が可能
var window:NativeWindow = stage.window;
 

Stage の window プロパティは Apollo 実行環境でのみ有効で、Flash Player 環境では存在しません。プラグインは個別のウインドウを持たないので当たり前といえば当たり前ですが。

ちなみに、アプリケーションから実行環境を調べる方法の一つとして System.Capabilities.playerType が使えます。

public function isDesktopPlayer():Boolean
{
  return (Capabilities.playerType == "Desktop");
}
 

さて、NativeWindow クラスにはウインドウの大きさを操作するためのメソッドがいくつか提供されています。

public function maximize():void // ウインドウを最大化する
public function minimize():void // ウインドウを最小化する
public function restore():void  // ウインドウの大きさを元に戻す
public function close():void    // ウインドウを閉じる
 

maximize() と minimize() はそれぞれウインドウを最小化 / 最大化するメソッドです。restore() はウインドウが最小化または最大化された状態からそれ以前の位置と大きさにウインドウを復元するメソッドです。

4つ目の close() はウインドウを閉じるメソッドです。一度閉じたウインドウを再度開くことはできません。一時的ににウインドウを隠すだけであれば visible 属性を使う方法があります。

displayObject.stage.window.visible = false; // ウインドウを一時的に隠す
 

後で visible 属性を true に設定すれば再びウインドウが表示されます。(ちなみにアプリケーション記述ファイル (アプリ名-app.xml) の rootContent タグの3つめの属性の visible で設定されるのもこの属性です)

以下はこれらのメソッドを使ったサンプルです。Application のスタイル指定でメインウインドウの背景を透明にしているため、2つの HBox に明示的に背景色を指定しています。 (注:app.xml 内 rootContent タグの属性値変更をお忘れなく)

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
  <mx:Script>
  <![CDATA[
    private function onMinBtnClick(e:MouseEvent):void
    {
      stage.window.minimize( );
    }
    private function onMaxBtnClick(e:MouseEvent):void
    {
      stage.window.maximize( );
    }
    private function onRestoreBtnClick(e:MouseEvent):void
    {
      stage.window.restore( );
    }
    private function onCloseBtnClick(e:MouseEvent):void
    {
      stage.window.close( );
    }
  ]]>
  </mx:Script>
  <mx:Style>
    Application
    {
      background-color:"";
      background-image:"";
    }
    .box {
      backgroundColor:#888888;
      backgroundAlpha:0.8;
    }
  </mx:Style>
  <mx:HBox styleName="box" width="100%">
    <mx:Button id="minBtn" label="_" click="onMinBtnClick(event)" />
    <mx:Button id="maxBtn" label='{"\u25A2"}' click="onMaxBtnClick(event)" />
    <mx:Button id="restoreBtn" label='{"v"}' click="onRestoreBtnClick(event)" />
    <mx:Button id="closeBtn" label="X" click="onCloseBtnClick(event)" />
  </mx:HBox>
  <mx:HBox styleName="box" width="100%" height="100%"/>
</mx:Application>
 

今回紹介した4つのメソッドの実行は非同期です。完了通知はイベントによって行われます。

コメントする

2014年1月

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
レンタルサーバー

月別 アーカイブ

Powered by Movable Type 4.261