NativeWindowDisplayState クラス
ウインドウの現在の表示状態を知りたいとき、NativeWindow クラスの displayState プロパティ (読み取り専用) から取得することができます。
var windowStatus:String = stage.window.displayState;
このプロパティの持つ値は NativeWindowDisplayState というクラスに定義されています。とりうる値は以下の3種類です。
NativeWindowDisplayState.NORMAL // ウインドウは通常の表示状態である NativeWindowDisplayState.MINIMIZED // ウインドウは最小化されている NativeWindowDisplayState.MAXIMIZED // ウインドウは最大化されている
これを使うと前回紹介した NativeWindow のメソッドは以下のように理解することができます。
public function maximize():void // displayState を MAXIMIZED にする public function minimize():void // displayState を MINIMIZED にする public function restore():void // displayState を NORMAL にする
ウインドウの displayState を変更できるのはこの3つのメソッドのみです。(いまのところ)
さて、以上を踏まえて前回のサンプルを修正してみます。
前回のサンプルでは4つのボタン(最小 / 最大 / 戻る / 閉じる)が常に表示されたままでした。
maximize() メソッドはウインドウが最大化されていれば呼ばれても何もしません。つまり悪さはしません。 (minimize() メソッドも同様です) ですが、押しても何もしないボタンが表示されているのもなんですので、一般的な OS のウインドウのように1つのボタンで”最大化”と”戻る”の操作を兼ねるようにしたいと思います。
アプリケーションの起動時はウインドウは最大化されていないと考えてよいと思われるので、最初は最大化ボタンを表示しておき、その後はボタンが押されるたびにウインドウの状態により動作を切り替えるという方針をとることにします。
そうすると最大化ボタンが押されたときに呼び出される onMaxBtnClick() は以下のように書き直すことができます。
private function onMaxBtnClick(e:MouseEvent):void
{
if (stage.window.displayState != NativeWindowDisplayState.MAXIMIZED)
{
stage.window.maximize( );
maxBtn.label = "v";
}
else
{
stage.window.restore( );
maxBtn.label = "\u25A2";
}
}
上のメソッド内では、最初に displayState の値を調べたらその値に従って呼び出すメソッドとボタンのラベルを変更しています。
大きさを戻す専用のボタンはいらなくなるため全体のコードは以下のようになります。
<?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
{
if (stage.window.displayState != NativeWindowDisplayState.MAXIMIZED)
{
stage.window.maximize( );
maxBtn.label = "v";
}
else
{
stage.window.restore( );
maxBtn.label = "\u25A2";
}
}
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="closeBtn" label="X" click="onCloseBtnClick(event)" />
</mx:HBox>
<mx:HBox styleName="box" width="100%" height="100%"/>
</mx:Application>

Leave a comment