Flex Air TitleWindow 拖动范围控制

    在flex里面TitleWindow的拖动范围默认是不控制的,但是我们经常需要将其约束在整个应用程序的主窗口内,我找了半天也没有找到相关属性设置,只能重写,下面是重写的代码:

    

		override protected function startDragging(event:MouseEvent):void
		{
			regX = event.stageX - x;
			regY = event.stageY - y;
			
			var sbRoot:DisplayObject = systemManager.getSandboxRoot();
			sbRoot.addEventListener(
				MouseEvent.MOUSE_MOVE, systemManager_mouseMoveHandler, true);
			
			sbRoot.addEventListener(
				MouseEvent.MOUSE_UP, systemManager_mouseUpHandler, true);
			
			sbRoot.addEventListener(
				SandboxMouseEvent.MOUSE_UP_SOMEWHERE, stage_mouseLeaveHandler);
			
			// add the mouse shield so we can drag over untrusted applications.
			systemManager.deployMouseShields(true);
		}
		
		protected override function stopDragging():void
		{
			var sbRoot:DisplayObject = systemManager.getSandboxRoot();
			sbRoot.removeEventListener(
				MouseEvent.MOUSE_MOVE, systemManager_mouseMoveHandler, true);
			
			sbRoot.removeEventListener(
				MouseEvent.MOUSE_UP, systemManager_mouseUpHandler, true);
			
			sbRoot.removeEventListener(
				SandboxMouseEvent.MOUSE_UP_SOMEWHERE, stage_mouseLeaveHandler);
			
			regX = NaN;
			regY = NaN;
			
			systemManager.deployMouseShields(false);
		}
		
		private function systemManager_mouseMoveHandler(event:MouseEvent):void
		{			
			event.stopImmediatePropagation();
			
			if (isNaN(regX) || isNaN(regY))
			{				
				return;
			}
			
			var x:Number = event.stageX - regX;
			var y:Number = event.stageY - regY;
			var maxX:Number = this.stage.nativeWindow.width - this.width;
			var maxY:Number = this.stage.nativeWindow.height - this.height;

			//超出范围 ,停止移动
			if(x < 0) x = 0;
			if(y < 0) y = 0;
			if(x > maxX) x = maxX;
			if(y > maxY) y = maxY;
			
			move(x, y);
		}
		
		private function systemManager_mouseUpHandler(event:MouseEvent):void
		{
			// trace("systemManager_mouseUpHandler: " + event);
			if (!isNaN(regX))
				stopDragging();
		}		
		
		private function stage_mouseLeaveHandler(event:Event):void
		{
			// trace("stage_mouseLeaveHandler: " + event);
			if (!isNaN(regX))
				stopDragging();
		}
		
		//拖动相关
		private var regX:Number;
		private var regY:Number;

posted @ 2011-05-05 20:03  李土鳖  阅读(1555)  评论(1编辑  收藏  举报