Win8.Xタブレットの向き
furafura 2014/09/05(Fri) 10:36
現在のSiv3Dで、タブレットでのモニタの向きを検出して処理するには、どうするのが最良でしょうか?
Reputeless 2014/09/05(Fri) 16:44
スクリーンの解像度を Window::GetState().screenSize で取得できますが、
実行中にスクリーンの向きや解像度が変わることを想定していませんでした。
したがって、Siv3D May 2014 では次のように Win32 API を用いて縦横の解像度を得るのが良いと思います。
# define NOMINMAX
# define STRICT
# define WIN32_LEAN_AND_MEAN
# include <Windows.h>
# include <Siv3D.hpp>
Point GetCurrentScreenSize()
{
//return Window::GetState().screenSize;
return{ ::GetSystemMetrics(SM_CXSCREEN), ::GetSystemMetrics(SM_CYSCREEN) };
}
void Main()
{
while (System::Update())
{
ClearPrint();
Println(GetCurrentScreenSize());
}
}
スクリーンの回転検出については、将来のバージョンで対応を改善します。
furafura 2014/09/06(Sat) 18:35
将来的には、仰っている回転検出の実装に期待したいと思います。
教えて頂いた方法を試した範囲では、確かに向きは得られます。
ですが横幅一杯のウィンドウサイズで回転が発生すると、私の環境(VAIO duo11)ではフルスクリーンモードも含めてウィンドウ面積が大きく変化してしまいます。
フルスクリーン時の向き(0-270度)だけが得られれば、絵的な変化は不要の立場ですが、Windowsでは簡単に行かない印象です。
回転停止にすると、方向の変化自体が発生しない感じですし。
私の、説明不足の質問に、丁寧に回答下さいましてありがとうございました。
furafura 2014/12/02(Tue) 23:13
Siv3D November 2014ですが、早速試させていただいております。
タブレットの向きについてですが、
向きの変更は
displayChanged
で検出出来るようで対応感謝致します。
その上で質問なのですが、
現在のモニタ方向を得る方法はございますでしょうか。
加えて、回転の抑制(画面のロック)をアプリケーション起動中に行う事は可能でしょうか?
参考表現:http://msdn.microsoft.com/ja-jp/library/ie/dn433241(v=vs.85).aspx
Reputeless 2014/12/05(Fri) 13:58
ご提案ありがとうございます。
モニタの方向、回転抑制については今後調査します。
furafura 2014/12/06(Sat) 09:29
お忙しい所返答いただきましてありがとうございました。
もしかしたら難しいのかも知れません。
ロックについては、現時点ではユーザーさんの手で抑制して貰う方向で考えています。
余談ですが、Siv3D November 2014へのアップデート時に、すんなり行かなかったので一応報告させていただきます。
正確にはアップデートは巧く出来ていました。
アプリ起動後libmpg123でエラーが出まして、再起動すれば動く可能性があるとの事でやってみた所、症状同じく停止して終了してしまいます。
間を省きますが、結論としては、tsugi QuickAudioの試用を中止(アンインストール)した所、改善しました。
推測される理屈としては、同ソフトはシステム起動後に常駐します。
どうやらlibmpg系を用いているらしい(表示が出ます)ので、それが原因でSiv3Dが起動しなくなるものと考え、削除した所、症状が改善しました。
将来的に何か対策があると良いとは感じました。同ソフトもDLLじゃないかなと思うのですが、そこまでは調べておりません。
Reputeless 2014/12/11(Thu) 09:52
ご報告ありがとうございます。
原因を調査します。