displayStateChanging 的取消
在NativeWindow 类的事件详解1里也提到,ing系的事件是可以取消的。比如取消 displayStateChanging 事件就意味着不变更 displayState,也就是说不进行最大化/最小化。
在AS3里,标准的取消事件方法是调用preventDefault()。如果直接使用上次的例子的话,只需要在onDispStateEvent()里加上preventDefault()。
因为onDispStateEvent()方法是displayStateChange和displayStateChanging两个事件共用了的,所以有可能events是不可取消的displayStateChange事件。所以需要判断是哪一个事件:
private function onDispStateEvent(e:NativeWindowDisplayStateEvent):void {
if (e.cancelable) { // 检测是否可以取消
e.preventDefault(); // 取消事件
}
trace("type:", e.type, e.afterDisplayState);
}
执行后,就会发现系统窗口的按钮会没反应,但程序里的按钮却照常不误。并且如果在程序里的按钮事件里触发displayStateChanging事件的话,程序里的按钮就与系统窗口的按钮动作一样了。
NativeWindowBoundsEvent
如果NativeWindow的bounds属性被变更,就会触发NativeWindowBoundsEvent。bounds被触发的情况是窗口的大小或位置被改变时。
NativeWindowBoundsEvent拥有beforeBounds和afterBounds属性,分别指变更前和变更后的值。ing系(moving,resizing)事件的beforeBounds为当前值,完成通知(move,resize)事件的afterBounds为当前值。
与NativeWindowDisplayStateEvent一样,move和resize事件会在任何条件下触发,但moving和resizing不会在代码里触发,只会在用鼠标拖动系统窗口等条件下触发。
注意,在Stage类里也有一个resize事件,这是在画面的大小发生改变,重画时触发的。
以下是测试NativeWindowBoundsEvent的例子。
<?xml version="1.0" encoding="utf-8"?>
<mx:ApolloApplication xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="addListeners()">
<mx:Script>
<![CDATA[
private function addListeners():void {
stage.window.addEventListener( NativeWindowBoundsEvent.RESIZE, onBoundsEvent);
stage.window.addEventListener( NativeWindowBoundsEvent.RESIZING, onBoundsEvent);
stage.window.addEventListener( NativeWindowBoundsEvent.MOVE, onBoundsEvent);
stage.window.addEventListener( NativeWindowBoundsEvent.MOVING, onBoundsEvent);
}
private function onBoundsEvent(e:NativeWindowBoundsEvent):void {
trace("type:", e.type, e.afterBounds);
}
private function onBoxMouseDown(e:MouseEvent):void {
stage.window.startResize( NativeWindowResize.BOTTOM_RIGHT);
}
private function onBarMouseDown(e:MouseEvent):void {
stage.window.startMove();
}
]]>
</mx:Script>
<mx:HBox mouseDown="onBarMouseDown(event)" width="100%" height="24" backgroundColor="#ffffff"/>
<mx:HBox mouseDown="onBoxMouseDown(event)" width="100%" height="100%" backgroundColor="#ffffff"/>
</mx:ApolloApplication>
close与closing事件
这是关闭窗口时触发的事件。事件类型为flash.events.Event。
closing是在关闭前,close是在关闭后触发。如果取消closing事件,窗口将不会被关闭。其余与NativeWindowBoundsEvent的触发方式一样,在这里就不重复了。
(完)
没有评论:
发表评论