윈도우 관리Adobe AIR 1.0 이상 NativeWindow 클래스의 속성과 메서드를 사용하여 데스크톱 윈도우의 모양, 비헤이비어 및 수명 주기를 관리합니다. 참고: Flex 프레임워크를 사용하는 경우 일반적으로 프레임워크 클래스를 사용하여 윈도우 비헤이비어를 관리하는 것이 좋습니다. 대부분의 NativeWindow 속성 및 메서드는 mx:WindowedApplication 및 mx:Window 클래스를 통해 액세스할 수 있습니다.
NativeWindow 인스턴스 얻기윈도우를 조작하려면 먼저 윈도우 인스턴스를 얻어야 합니다. 다음 중 하나에서 윈도우 인스턴스를 얻을 수 있습니다.
Flex mx:WindowedApplication 및 mx:Window 객체가 표시 객체이기 때문에 다음과 같이 stage 속성을 사용하여 MXML 파일에서 응용 프로그램 윈도우를 쉽게 참조할 수 있습니다. <?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 참고: Flex 프레임워크에서 WindowedApplication 또는 Window 구성 요소를 윈도우 스테이지에 추가할 때까지 구성 요소의 stage 속성은 null입니다. 이 비헤이비어는 Flex 응용 프로그램 구성 요소의 비헤이비어와 일치하지만 creationComplete와 같이 WindowedApplication 및 Window 구성 요소의 초기화 주기에서 초기에 발생하는 이벤트의 리스너에서 스테이지나 NativeWindow 인스턴스에 액세스할 수 없습니다. applicationComplete 이벤트가 전달될 때 스테이지와 NativeWindow 인스턴스에 액세스하는 것이 안전합니다.
윈도우 활성화, 표시 및 숨기기윈도우를 활성화하려면 NativeWindow activate() 메서드를 호출합니다. 윈도우를 활성화하면 윈도우가 맨 앞에 배치되고 키보드 및 마우스 포커스를 갖게 되며 필요한 경우 윈도우를 복원하거나 visible 속성을 true로 설정하여 윈도우를 표시할 수 있습니다. 윈도우를 활성화할 때 응용 프로그램에서 다른 윈도우의 순서는 변경되지 않습니다. activate() 메서드를 호출하면 윈도우에서 activate 이벤트를 전달합니다. 활성화하지 않고 숨겨진 윈도우를 표시하려면 visible 속성을 true로 설정합니다. 이렇게 하면 윈도우가 맨 앞에 배치되지만 윈도우에 포커스가 할당되지 않습니다. 윈도우를 숨기려면 visible 속성을 false로 설정합니다. 윈도우를 숨기면 윈도우, 관련 작업 표시줄 아이콘 및 Mac OS X에서는 Windows 메뉴의 항목이 표시되지 않습니다. 창의 가시성을 변경하면 해당 창이 소유한 모든 창의 가시성 또한 변경됩니다. 예를 들어 특정 창을 숨기는 경우 이 창이 소유한 모든 창도 숨겨집니다. 참고: Mac OS X에서는 도크의 윈도우 부분에 아이콘이 있는 최소화된 윈도우를 완전히 숨길 수 없습니다. 최소화된 윈도우에서 visible 속성이 false로 설정되어 있는 경우 윈도우의 도크 아이콘이 여전히 표시됩니다. 사용자가 아이콘을 클릭하면 윈도우가 표시 상태로 복원되고 표시됩니다.
윈도우 표시 순서 변경AIR에서는 윈도우의 표시 순서를 직접 변경하는 몇 가지 방법을 제공합니다. 윈도우를 표시 순서의 앞이나 뒤로 이동하거나 다른 윈도우의 위나 아래로 이동할 수 있습니다. 이와 동시에 사용자가 윈도우를 활성화하여 윈도우의 순서를 재배열할 수 있습니다. alwaysInFront 속성을 true로 설정하여 다른 윈도우 앞에 윈도우를 유지할 수 있습니다. 두 개 이상의 윈도우에 이 설정이 있으면 이러한 윈도우의 표시 순서가 서로 정렬되지만 이러한 윈도우는 alwaysInFront가 false로 설정된 윈도우 위에 항상 정렬됩니다. 또한 AIR 응용 프로그램이 활성화되어 있지 않은 경우에도 최상위 그룹의 윈도우가 다른 응용 프로그램의 윈도우 위에 표시됩니다. 이 비헤이비어는 사용자에게 방해가 될 수 있기 때문에 필요하고 적절한 경우에만 alwaysInFront를 true로 설정해야 합니다. 이러한 설정이 적합한 예는 다음과 같습니다.
참고: AIR에서는 alwaysInFront 속성을 적절히 사용하도록 강제하지 않습니다. 그러나 응용 프로그램이 사용자의 작업 과정을 방해하는 경우 해당 사용자의 휴지통에 들어가게 될 수 있습니다.
특정 창이 다른 여러 창을 소유한 경우 이러한 창은 항상 해당 창 앞에 정렬됩니다. 다른 창을 소유한 창에서 orderToFront()를 호출하거나 alwaysInFront를 true로 설정하면 소유된 창이 소유 창과 함께 다른 창들 앞에 다시 정렬되지만 소유된 창은 여전히 소유 창 앞에 표시됩니다. 소유된 창에서 창 정렬 메서드를 호출하는 작업은 동일한 창에 소유된 창 간에 정상적으로 작동하지만 전체 소유된 창 그룹의 순서 또한 해당 그룹 외부의 창과 비교해 변경될 수 있습니다. 예를 들여 소유된 창에서 orderToFront()를 호출하면 해당 창과 소유 창, 그리고 이 창에서 소유한 다른 모든 창이 창 표시 순서의 맨 앞으로 이동합니다. NativeWindow 클래스는 다른 윈도우에 상대적으로 윈도우의 표시 순서를 설정하기 위한 다음 속성과 메서드를 제공합니다.
참고: 윈도우가 숨겨져 있거나(visible이 false인 경우) 최소화된 경우 표시 순서 메서드를 호출해도 아무 효과가 없습니다.
Linux 운영 체제에서는 윈도우 표시 순서와 관련하여 윈도우 관리자마다 서로 다른 규칙이 적용됩니다.
윈도우 닫기윈도우를 닫으려면 NativeWindow.close() 메서드를 사용합니다. 윈도우를 닫으면 윈도우의 내용이 언로드되지만 다른 객체가 이 내용에 대한 참조를 가진 경우 내용 객체가 삭제되지 않습니다. NativeWindow.close() 메서드는 비동기적으로 실행되며 윈도우에 포함된 응용 프로그램이 닫는 과정 중에 계속 실행됩니다. close 메서드는 닫기 작업이 완료되면 close 이벤트를 전달합니다. NativeWindow 객체는 기술적으로 유효하지만 닫힌 윈도우에 대한 속성과 메서드에 액세스하는 경우 대부분 IllegalOperationError가 생성됩니다. 닫힌 윈도우는 다시 열 수 없습니다. 윈도우의 closed 속성을 확인하여 윈도우가 닫혔는지 테스트할 수 있습니다. 윈도우를 숨기려면 NativeWindow.visible 속성을 false로 설정합니다. Nativeapplication.autoExit 속성이 기본값인 true이면 마지막 윈도우가 닫힐 때 응용 프로그램이 종료됩니다. 소유 창이 있는 모든 창은 해당 소유 창이 닫히면 모두 닫힙니다. 소유된 창은 closing 이벤트를 전달하지 않기 때문에 클로저를 방지할 수 없습니다. close 이벤트가 전달됩니다. 윈도우 작업의 취소 허용윈도우에서 시스템 크롬을 사용하는 경우 적절한 이벤트를 수신하고 해당 이벤트의 기본 비헤이비어를 취소하여 윈도우와 사용자의 상호 작용을 취소할 수 있습니다. 예를 들어 사용자가 시스템 크롬 닫기 버튼을 클릭하면 closing 이벤트가 전달됩니다. 등록된 리스너에서 이벤트의 preventDefault() 메서드를 호출하면 윈도우가 닫히지 않습니다. 윈도우에서 시스템 크롬을 사용하지 않는 경우에는 의도한 변경의 알림 이벤트가 변경이 수행되기 전에 자동으로 전달되지 않습니다. 따라서 윈도우를 닫기 위한 메서드를 호출하여 윈도우 상태를 변경하거나 윈도우 경계 속성을 설정하면 변경을 취소할 수 없습니다. 윈도우를 변경하기 전에 응용 프로그램의 구성 요소에 알리려면 응용 프로그램 논리에서는 윈도우의 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() 메서드를 명시적으로 사용하여 변경을 취소해야 할지 여부를 테스트하는 것이 좋습니다. 윈도우 최대화, 최소화 및 복원윈도우를 최대화하려면 NativeWindow maximize() 메서드를 사용합니다. myWindow.maximize(); 윈도우를 최소화하려면 NativeWindow minimize() 메서드를 사용합니다. myWindow.minimize(); 윈도우를 복원하려면(즉, 이전의 최소화되었거나 최대화된 크기로 되돌리려면) NativeWindow restore() 메서드를 사용합니다. myWindow.restore(); 소유 창이 있는 창은 소유 창이 최소화되거나 복원되면 함께 최소화되고 복원됩니다. 소유된 창은 소유 창이 최소화되어 함께 최소화된 경우에 아무런 이벤트도 전달하지 않습니다. 참고: AIR 윈도우 최대화로 인한 비헤이비어는 Mac OS X 표준 비헤이비어와 다릅니다. 응용 프로그램에서 정의한 "표준" 크기와 사용자가 설정한 마지막 크기 간을 전환하는 대신 AIR 윈도우는 응용 프로그램이나 사용자가 마지막으로 설정한 크기와 화면의 사용 가능한 전체 영역 간을 전환합니다.
Linux 운영 체제에서는 윈도우 표시 상태 설정과 관련하여 윈도우 관리자마다 서로 다른 규칙이 적용됩니다.
참고: Linux에서 윈도우 속성은 비동기적으로 변경됩니다. 프로그램의 한 행에서 표시 상태를 변경하고 다음 행에서 값을 읽으면 읽는 값에 여전히 이전 설정이 반영됩니다. 모든 플랫폼에서 NativeWindow 객체는 표시 상태가 변경되면 displayStateChange 이벤트를 전달합니다. 윈도우의 새로운 상태에 따라 어떤 액션을 취해야 하는 경우에는 항상 displayStateChange 이벤트 핸들러를 사용합니다. 자세한 내용은 윈도우 이벤트 수신을 참조하십시오.
예제: 윈도우 최소화, 최대화, 복원 및 닫기아래의 간단한 MXML 응용 프로그램에서는 Window 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> 아래의 Flash용 ActionScript 예제에서는 NativeWindow minimize(), maximize(), restore() 및 close() 메서드를 트리거하는 클릭 가능한 네 가지 텍스트 필드를 만듭니다. package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.text.TextField; public class MinimizeExample extends Sprite { public function MinimizeExample():void { var minTextBtn:TextField = new TextField(); minTextBtn.x = 10; minTextBtn.y = 10; minTextBtn.text = "Minimize"; minTextBtn.background = true; minTextBtn.border = true; minTextBtn.selectable = false; addChild(minTextBtn); minTextBtn.addEventListener(MouseEvent.CLICK, onMinimize); var maxTextBtn:TextField = new TextField(); maxTextBtn.x = 120; maxTextBtn.y = 10; maxTextBtn.text = "Maximize"; maxTextBtn.background = true; maxTextBtn.border = true; maxTextBtn.selectable = false; addChild(maxTextBtn); maxTextBtn.addEventListener(MouseEvent.CLICK, onMaximize); var restoreTextBtn:TextField = new TextField(); restoreTextBtn.x = 230; restoreTextBtn.y = 10; restoreTextBtn.text = "Restore"; restoreTextBtn.background = true; restoreTextBtn.border = true; restoreTextBtn.selectable = false; addChild(restoreTextBtn); restoreTextBtn.addEventListener(MouseEvent.CLICK, onRestore); var closeTextBtn:TextField = new TextField(); closeTextBtn.x = 340; closeTextBtn.y = 10; closeTextBtn.text = "Close Window"; closeTextBtn.background = true; closeTextBtn.border = true; closeTextBtn.selectable = false; addChild(closeTextBtn); closeTextBtn.addEventListener(MouseEvent.CLICK, onCloseWindow); } function onMinimize(event:MouseEvent):void { this.stage.nativeWindow.minimize(); } function onMaximize(event:MouseEvent):void { this.stage.nativeWindow.maximize(); } function onRestore(event:MouseEvent):void { this.stage.nativeWindow.restore(); } function onCloseWindow(event:MouseEvent):void { this.stage.nativeWindow.close(); } } } 윈도우 크기 조절 및 이동윈도우에서 시스템 크롬을 사용하는 경우 시스템 크롬은 윈도우 크기 조절과 바탕 화면 위의 이동을 위한 드래그 컨트롤을 제공합니다. 윈도우에서 시스템 크롬을 사용하지 않는 경우에는 사용자가 윈도우 크기를 조절하고 이동할 수 있도록 사용자 고유의 컨트롤을 추가해야 합니다. 참고: 윈도우 크기를 조절하고 이동하려면 먼저 NativeWindow 인스턴스에 대한 참조를 얻어야 합니다. 윈도우 참조를 얻는 방법에 대한 자세한 내용은 NativeWindow 인스턴스 얻기를 참조하십시오.
윈도우 크기 조절사용자가 대화식으로 윈도우 크기를 조절할 수 있도록 하려면 NativeWindow startResize() 메서드를 사용합니다. 이 메서드가 mouseDown 이벤트에서 호출되면 크기 조절 작업이 마우스로 작동되고 운영 체제에서 mouseUp 이벤트를 받으면 완료됩니다. startResize()를 호출할 때 윈도우 크기를 조절할 가장자리나 모서리를 지정하는 인수를 전달합니다. 윈도우 크기를 프로그래밍 방식으로 설정하려면 윈도우의 width, height 또는 bounds 속성을 원하는 크기로 설정합니다. 경계를 설정하면 윈도우 크기 및 위치를 동시에 변경할 수 있습니다. 그러나 변경되는 순서는 확실하지 않습니다. 일부 Linux 윈도우 관리자에서는 윈도우를 데스크톱 화면의 경계 밖으로 확장할 수 없습니다. 이러한 경우 변경 사항을 적용한 결과 유효한 윈도우가 생성되더라도 속성이 설정되는 순서 때문에 최종 윈도우 크기가 제한될 수 있습니다. 예를 들어 화면 아래쪽 근처에 있는 윈도우의 높이와 y 위치를 모두 변경하는 경우 높이 변경 사항이 적용된 후에 y 위치가 변경되면 전체 높이가 변경되지 않을 수 있습니다. 참고: Linux에서 윈도우 속성은 비동기적으로 변경됩니다. 프로그램의 한 행에서 윈도우의 크기를 변경하고 다음 행에서 크기를 읽으면 읽는 값에 여전히 이전 설정이 반영됩니다. 모든 플랫폼에서 NativeWindow 객체는 윈도우 크기가 변경되면 resize 이벤트를 전달합니다. 윈도우의 새로운 상태 또는 크기에 따라 윈도우에서 컨트롤을 배치하는 등의 어떤 액션을 취해야 하는 경우에는 항상 resize 이벤트 핸들러를 사용합니다. 자세한 내용은 윈도우 이벤트 수신을 참조하십시오.
스테이지의 크기 조절 모드는 윈도우 크기가 조절될 때 윈도우 스테이지와 그 내용이 동작하는 방식을 결정합니다. 스테이지 크기 조절 모드가 응용 프로그램이 표시 공간의 크기나 종횡비를 제어하지 않는 웹 브라우저와 같은 경우를 위해 설계되었음을 명심하십시오. 일반적으로 스테이지 scaleMode 속성을 StageScaleMode.NO_SCALE로 설정하여 최상의 결과를 얻을 수 있습니다. 윈도우의 내용 크기를 조절하려는 경우 여전히 윈도우 경계 변경에 대한 응답으로 내용의 scaleX 및 scaleY 매개 변수를 설정할 수 있습니다. 윈도우 이동크기를 조절하지 않고 윈도우를 이동하려면 NativeWindow startMove() 메서드를 사용합니다. startResize() 메서드와 마찬가지로, startMove() 메서드가 mouseDown 이벤트에서 호출되면 이동 프로세스가 마우스로 작동되고 운영 체제에서 mouseUp 이벤트를 받으면 완료됩니다. startResize() 및 startMove() 메서드에 대한 자세한 내용은 Flash 플랫폼용 Adobe ActionScript 3.0 참조 설명서를 참조하십시오. 윈도우를 프로그래밍 방식으로 이동하려면 윈도우의 x, y 또는 bounds 속성을 원하는 위치로 설정합니다. 경계를 설정하면 윈도우 크기 및 위치를 동시에 변경할 수 있습니다. 참고: Linux에서 윈도우 속성은 비동기적으로 변경됩니다. 프로그램의 한 행에서 윈도우를 이동하고 다음 행에서 위치를 읽으면 읽는 값에 여전히 이전 설정이 반영됩니다. 모든 플랫폼에서 NativeWindow 객체는 위치가 변경되면 move 이벤트를 전달합니다. 윈도우의 새로운 위치에 따라 어떤 액션을 취해야 하는 경우에는 항상 move 이벤트 핸들러를 사용합니다. 자세한 내용은 윈도우 이벤트 수신을 참조하십시오.
예제: 윈도우 크기 조절 및 이동다음 예제에서는 윈도우에서 크기 조절 및 이동 작업을 시작하는 방법을 보여 줍니다. 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(0, 0, 400, 300); this.graphics.endFill(); // Creates a square area where a mouse down will start the resize. var resizeHandle:Sprite = createSprite(0xCCCCCC, 20, this.width - 20, this.height - 20); resizeHandle.addEventListener(MouseEvent.MOUSE_DOWN, onStartResize); // Creates a square area where a mouse down will start the move. var moveHandle:Sprite = createSprite(0xCCCCCC, 20, this.width - 20, 0); 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(0, 0, 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(); } } } |
|