控制窗体

 

控制窗体

这一章节讨论如何使用NativeWindow类的属性和方法控制应用程序窗体的外观和行为。

得到NativeWindow实例

要想操作窗体,必须先得到窗体实例,可在下面这些地方得到窗体实例:

窗体构造函数

也就是新建NativeWindow所用的构造函数. 

窗体的stage  

也就是stage.nativeWindow 

任何可视化对象的stage

也就是myDisplayObject.stage.nativeWindow.

窗体事件

Event对象的target属性指向窗体引用

HTMLControl或HTML窗体的全局属性nativeWindow

也就是window.nativeWindow.

Shell 对象

Shell.shell.activeWindow 指向应用程序的活动窗体(激活状态,如果没有任何窗体处于激活状态则返回null)。Shell.shell.openedWindows数组包含应用程序中所有未被打开的窗体。

因为Flex Application, WindowedApplication, 和Window 对象都是可视化对象,我们可以很容易通过stage属性得到窗体引用:

<? xml version="1.0" encoding="utf-8" ?>  

< mx:WindowedApplication  xmlns:mx ="http://www.adobe.com/2006/mxml"  applicationComplete ="init();" >  

    
< mx:Script >  

        
<![CDATA[  

            import flash.display.NativeWindow; 

            public function init():void{ 

                var appWindow:NativeWindow = this.stage.nativeWindow; 

                //set window properties 

                appWindow.visible = true; 

            } 

        
]]>  

    
</ mx:Script >  

</ WindowedApplication >

 

 

 

激活,显示,隐藏窗体

调用NativeWindow.activate()方法激活一个窗体,激活窗体后将使窗体显示在最顶层,开始获得键盘和鼠标焦点,如果有必要可恢复window的visible属性或设置visible=true,激活一个窗体并不会改变其他窗体的顺序。

要想显示没有激活的隐藏窗体,可设置其visible属性为true,这将使窗体显示在最顶层,但是由于未激活,不能接收键盘和鼠标反应。

要隐藏窗体,可设置NativeWindow.visible属性为false。隐藏一个窗体将取消窗体的显示以及相关的任何栏图标。

最大化,最小化和还原窗体

使用NativeWindow.maximize()方法使窗体最大化显示

myWindow.maximize(); 

使用NativeWindow.minimize()方法使窗体最小化显示

myWindow.minimize(); 

还原一个窗体指恢复到最大化和最小化之前的状体。

myWindow.restore(); 

改变窗体显示顺序

AIR为窗体提供两组显示顺序,由alwaysInFront 属性进行控制。通过设置alwaysInFront=false,意思是把窗体放在正规的组群众,大多数窗体都放在这里。而第二个组群所放的窗体总是显示在正规组群窗体的上层。如果没有这个特殊组群的话,改变窗体顺序将会显得非常混乱,下列情况都将用到这个窗体组群:

临时的弹出式窗体,比如提示框,弹出式列表,自定义菜单或组合框,因为这些窗体用完即关闭。

屏幕保护

一些急需的错误信息框

生命周期很短的窗体

游戏或视频的全屏窗体

NativeWindow类提供下列方法用于设置窗体之间的显示顺序:

alwaysInFront 属性

指定使用哪个窗体组,一般情况下alwaysInFront=false ,如果设为true,这表示所有窗体都处于顶层位置(只是没有激活),如果在设为false,表示把窗体放入正规组的顶层(但是仍在顶层组的后面)。设置该值并不会改变窗体的顺序。

orderToFront() 

设置该窗体为组群中最前

orderInFrontOf() 

设置该窗体排在某窗体之前

orderToBack() 

设置该窗体为组群中最后

orderBehind() 

设置该窗体排在某窗体之后

注意:如果该窗体被隐藏或最小化,调用这些方法将无效。

关闭窗体

 使用NativeWindow.close方法关闭窗体

关闭一个窗体将卸载该窗体所包含的内容,不过如果还有其他对象引用这些内容,将不会被销毁。NativeWindow.close()方法的执行是异步的,应用程序仍然在关闭窗体过程中继续运行,当关闭完成时,该close方法将触发一个close事件。窗体被关闭后将无法访问其大部分属性和方法,否则会抛出IllegalOperationError异常,关闭的窗体将不能再次打开,可通过closed属性检测窗体是否已被关闭。要简单的隐藏窗体,只要设置其visible属性为false就可以了。

如果Shell.autoExit属性为true(默认设置),当应用程序的所有窗体都关闭后,程序也将停止运行。

允许撤销对窗体的操作

 当窗体使用操作系统窗体风格,用户与窗体的交互可通过一些事件进行取消,比如说,单用户点击一个窗体上系统菜单的关闭按钮,这closing事件将被触发,任何注册的监听器调用preventDefault()方法可以取消关闭窗体。

如果窗体不使用系统窗体风格,这需要手动出发相应的事件。如果你调用一个方法要关闭窗体或改变窗体大小或设置bounds属性,这些改变将不能被取消,除非在窗体发生变化之前通知应用程序,应用程序逻辑通过dispatchEvent()发出相关的事件。

看下面的例子,下面的逻辑实现了可取消的窗体关闭按钮。:

public  function  onCloseCommand(event:MouseEvent): void

    
var closingEvent:Event = new Event(Event.CLOSING,true,true); 

    dispatchEvent(closing); 

    
if(!closingEvent.isDefaultPrevented())

        win.close(); 

    }
 

}
 

 

注意:如果事件的preventDefault() 方法被监听器调用,则dispatchEvent()方法返回false,但是也有其他原因可能返回false,所以最好的办法是使用isDefaultPrevented()方法检测是否已经取消操作。

例子:最小化,最大化,还原和关闭窗体

下面的这段代码演示窗体的maximize(), minimize(), restore(), 和close() 方法。

<? xml version="1.0" encoding="utf-8" ?>  

< mx:WindowedApplication  

    
xmlns:mx ="http://www.adobe.com/2006/mxml"   

    layout
="vertical" >  

    
< mx:Script >  

    
<![CDATA[  

    public function minimizeWindow():void 

    { 

        this.stage.nativeWindow.minimize(); 

    } 

    public function maximizeWindow():void 

    { 

        this.stage.nativeWindow.maximize(); 

    }           

    public function restoreWindow():void 

    { 

        this.stage.nativeWindow.restore(); 

    }           

    public function closeWindow():void 

    { 

        this.stage.nativeWindow.close(); 

    } 

    
]]>  

    
</ mx:Script >  

    
< mx:VBox >  

        
< mx:Button  label ="Minimize"  click ="minimizeWindow()" />  

        
< mx:Button  label ="Restore"  click ="restoreWindow()" />  

        
< mx:Button  label ="Maximize"  click ="maximizeWindow()" />  

        
< mx:Button  label ="Close"  click ="closeWindow()" />  

    
</ mx:VBox >  

</ mx:WindowedApplication >  

 

 

例子:改变大小和移动窗体

使用NativeWindow.startResize()方法改变窗体大小,该方法实际上是触发系统控制功能来改变窗体大小。当该方法在mouseDown 事件里调用时,大小改变是由鼠标确定的,当系统接收到mouseUp事件则停止大小调整。

如果不改变大小只移动窗体,可使用NativeWindow.startMove()方法,和startResize()方法一样,当startMove()方法mouseDown 事件里调用时,窗体移动过程是由鼠标确定的,直到系统接收到鼠标的mouseUp事件。

下面的这个例子演示如何初始化改变窗体大小和移动窗体操作:

package  



    
import flash.display.Sprite; 

    
import flash.events.MouseEvent; 

    
import flash.display.NativeWindowResize; 

    
public class NativeWindowResizeExample extends Sprite 

    


        
public function NativeWindowResizeExample():void 

        


            
// Fills a background area. 

            
this.graphics.beginFill(0xFFFFFF); 

            
this.graphics.drawRect(00400300); 

            
this.graphics.endFill(); 

            
// Creates a square area where a mouse down will trigger a resize. 

            var resizeHandle:Sprite 
= createSprite(0xCCCCCC20this.width - 20this.height - 20); 

            resizeHandle.addEventListener(MouseEvent.MOUSE_DOWN, onStartResize); 

            
// Creates a square area where a mouse down will trigger a move. 

            var moveHandle:Sprite 
= createSprite(0xCCCCCC20this.width - 200); 

            moveHandle.addEventListener(MouseEvent.MOUSE_DOWN, onStartMove); 

        }
 

        
public function createSprite(color:int, size:int, x:int, y:int):Sprite 

        


            var s:Sprite 
= new Sprite(); 

            s.graphics.beginFill(color); 

            s.graphics.drawRect(
00, size, size); 

            s.graphics.endFill(); 

            s.x 
= x; 

            s.y 
= y; 

            
this.addChild(s);     

            
return s;         

        }
 

        
public function onStartResize(event:MouseEvent):void 

        


            
this.stage.nativeWindow.startResize(NativeWindowResize.BOTTOM_RIGHT); 

        }
 

        
public function onStartMove(event:MouseEvent):void 

        


            
this.stage.nativeWindow.startMove(); 

        }
 

    }
 

}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值