[AIR] NativeWindowを仮想デスクトップ一杯に表示しようとしたらタスクバーの上に重なった件

2010/03/3

こんにちは。きんくまです。
またAIRメモです。

NativeWindowを仮想デスクトップ一杯にして、そのステージ上をキャラが動きまわれるようにしたかったんです。
それで、デュアルモニターなんかを考慮した仮想デスクトップの計算方法が書いてあり、そこまでは大喜び!

> 仮想デスクトップのサイズ計算

これすごいですよ。あるモニタ(Screen)の横にさらにモニタがあるかどうかの判定方法なんかも書いてあっておお!みたいな。
まあ、そこまではいいです。
問題は、これを参考に

		private function setStageSettings():void
		{
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
			var virtualRect:Rectangle = computeVirtualBounds(Screen.screens);
			stage.nativeWindow.width = virtualRect.width;
			stage.nativeWindow.height = virtualRect.height;
			stage.nativeWindow.x = 0;
			stage.nativeWindow.y = 0;
		}

		private function computeVirtualBounds(screens:Array):Rectangle{
			var bounds:Rectangle = new Rectangle();
			for each (var screen:Screen in screens){
				if(bounds.left > screen.bounds.left){bounds.left = screen.bounds.left;}
				if(bounds.right < screen.bounds.right){bounds.right = screen.bounds.right;}
				if(bounds.top > screen.bounds.top){bounds.top = screen.bounds.top;}
				if(bounds.bottom < screen.bounds.bottom){bounds.bottom = screen.bounds.bottom;}
			}
			return bounds;
		}

とかやってみたんですよ。そしたらWin7のOSのタスクバー(アプリきりかえられる部分)の上にNativeWindowがのっかる!!!
通常はAIRに限らずどんなアプリでもタスクバーの下というか裏側にくるんですが、それがなぜか表側にきちゃって
操作ができなくなっちゃうんですよ!

それでですね、ネットとか公式サイトとか説明書とか探したんだけど結局わからず、
自分で地道に調べた結果やっとわかった結論としては
・ある一定の大きさ以上の幅・高さである(少なくとも1画面分以上)
・nativeWindowのx=0,y=0である
っていう2つの条件がそろうとダメっぽい。なんだそりゃ、そんなのわかんないよー。

なので、幅と高さを仮想デスクトップからそれぞれ2pxずつひいて、
x=1,y=1とかやったら大丈夫になりました。

この挙動すごーくあやしいので、ひょっとしたら私の端末だけかもしれないです。
一応書いておくと Win7 64bit proffesional です。
特にGPUを使うとかそういうことはしてません。なんなんだろー。

LINEで送る
Pocket

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る