AIR中文帮助 第十章. 窗体(Windows)和菜单

屏幕

根据AIR screen API可以获得系统桌面显示屏幕的信息。


屏幕简介

screen API包含一个简单类,Screen,获得系统屏幕信息和屏幕的详细描述。

计算机系统可能有多个监视器或显示设备,这样对应的多个桌面屏幕排列在虚拟空间上。AIR Screen类提供了关于屏幕信息,如果有多个监视器映射到同一个屏幕上,那只有一个屏幕可显示,如果屏幕的尺寸大于监视器显示范围,没有办法确定是哪一部分处于可视状态。

一个屏幕表示一个独立的桌面显示区域,被描述为虚拟桌面的一个矩形区域,屏幕左上角为初始坐标,单位为像素。

  screen_bounds.png ( 36.98KB ) 下载次数: 9

 上面的屏幕排列中,虚拟桌面上有两个屏幕,主屏幕(#1)的左上角坐标总是(0,0),如果屏幕排列设置屏幕#2作为主屏幕,则屏幕#1的坐标将为负坐标,一般指屏幕的可使用边界不包括菜单栏,任务栏。


枚举屏幕

通过下列屏幕方法和属性枚举虚拟桌面上的屏幕:

Screen.screens

数组对象,表示可用的屏幕,注意数组的元素顺序不是有效的。


Screen.mainScreen

表示代表主屏幕的屏幕对象,在Mac OS X系统中,主屏幕为显示菜单栏的所在屏幕,在Windows中为系统指定的主屏幕。


Screen.getScreensForRectangle()

通过指定的区域获得屏幕对象数组,该矩形区域作为参数传递给该方法,如果没有屏幕在范围内则返回空数组。


示例:在屏幕中移动窗体

 

这个例子使用screen API通过方向键在多个屏幕中移动窗体。


代码
package ...{

    import flash.display.Sprite;

    import flash.display.Screen;

    import flash.events.KeyboardEvent;

    import flash.ui.Keyboard;

    import flash.display.StageAlign;

    import flash.display.StageScaleMode;

   

    public class ScreenExample extends Sprite

    ...{

        public function ScreenExample()

        ...{

                stage.align = StageAlign.TOP_LEFT;

                stage.scaleMode = StageScaleMode.NO_SCALE;

                stage.addEventListener(KeyboardEvent.KEY_DOWN,onKey);

        }

   

        private function onKey(event:KeyboardEvent):void...{

            if(Screen.screens.length > 1)...{

                switch(event.keyCode)...{

                    case Keyboard.LEFT :

                        moveLeft();

                        break;

                    case Keyboard.RIGHT :

                        moveRight();

                        break;

                    case Keyboard.UP :

                        moveUp();

                        break;

                    case Keyboard.DOWN :

                        moveDown();

                        break;

                }   

            }

        }   

               

        private function moveLeft():void...{

            var currentScreen = getCurrentScreen();

            var left:Array = Screen.screens;

            left.sort(sortHorizontal);

            for(var i:int = 0; i < left.length - 1; i++)...{

                if(left.bounds.left < stage.nativeWindow.bounds.left)...{

                    stage.nativeWindow.x += 

                        left.bounds.left - currentScreen.bounds.left;

                    stage.nativeWindow.y += left.bounds.top - currentScreen.bounds.top;

                }

            } 

        }

       

        private function moveRight():void...{

            var currentScreen:Screen = getCurrentScreen();

            var left:Array = Screen.screens;

            left.sort(sortHorizontal);

            for(var i:int = left.length - 1; i > 0; i--)...{

                if(left.bounds.left > stage.nativeWindow.bounds.left)...{

                    stage.nativeWindow.x += 

                        left.bounds.left - currentScreen.bounds.left;

                    stage.nativeWindow.y += left.bounds.top - currentScreen.bounds.top;

                }

            } 

        }

 

        private function moveUp():void...{

            var currentScreen:Screen = getCurrentScreen();

            var top:Array = Screen.screens;

            top.sort(sortVertical);

            for(var i:int = 0; i < top.length - 1; i++)...{

                if(top.bounds.top < stage.nativeWindow.bounds.top)...{

                    stage.nativeWindow.x += top.bounds.left - currentScreen.bounds.left;

                    stage.nativeWindow.y += top.bounds.top - currentScreen.bounds.top;

                    break;

                }

            } 

        }

 

        private function moveDown():void...{

            var currentScreen:Screen = getCurrentScreen();

           

            var top:Array = Screen.screens;

            top.sort(sortVertical);

            for(var i:int = top.length - 1; i > 0; i--)...{

                if(top.bounds.top > stage.nativeWindow.bounds.top)...{

                    stage.nativeWindow.x += top.bounds.left - currentScreen.bounds.left;

                    stage.nativeWindow.y += top.bounds.top - currentScreen.bounds.top;

                    break;

                }

            } 

        }

       

        private function sortHorizontal(a:Screen,b:Screen):int...{

            if (a.bounds.left > b.bounds.left)...{

                return 1;

            } else if (a.bounds.left < b.bounds.left)...{

                return -1;

            } else ...{return 0;}

        }

       

        private function sortVertical(a:Screen,b:Screen):int...{

            if (a.bounds.top > b.bounds.top)...{

                return 1;

            } else if (a.bounds.top < b.bounds.top)...{

                return -1;

            } else ...{return 0;}

        }

       

        private function getCurrentScreen():Screen...{

            var current:Screen;

            var screens:Array = Screen.getScreensForRectangle(stage.nativeWindow.bounds);

            (screens.length > 0) ? current = screens[0] : current = Screen.mainScreen;

            return current;

        }       

    }

}
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值