ナビゲーションバーの高さ取得とタッチUIの判定(ハイレゾ非対応アプリ向け改訂版)
とあるブログにコメントで書いたネタなんですが、せっかくなのでエントリしておきます。
WindowsMobileでは従来のソフトウェアとの互換のため、標準では解像度のエミュレーションが働きます。例えばVGAの端末の場合、APIなどではQVGA相当の座標で処理される訳です。もちろんエミュレーションを切る方法も存在していて、エミュレーションを切るように設定されたアプリは俗に「ハイレゾ対応」と言われるわけですが。
GSFinde+ for W-ZERO3はハイレゾ対応だったりするのですが、すっかりそのことを忘れていました(苦笑)。ハイレゾに対応していないアプリの場合、あんな面倒なコードを書かなくても、もっと簡単にナビゲーションバーの高さを計算したり、タッチUIの判定が出来たりします*1。
ということで改訂版のコードです。
SIPINFO si = {sizeof(SIPINFO)}; SipGetInfo(&si); int navibar_height = 52 - si.rcVisibleDesktop.top;
SIPINFO si = {sizeof(SIPINFO)}; SipGetInfo(&si); if (si.rcVisibleDesktop.top < 26) bTouchUI = TRUE;
要するに、エミュレーションが効いている場合、座標値を解像度(dpi値)に合わせて修正する必要が無い、ってことですね。m_fpHighResolutionScaleはその修正に使う数値なので、バッサリ削除しちゃってOK。
一応、T-01BとWS011SHで実験しましたが問題ないようです。多分リアルVGAでも大丈夫なんじゃないかと思いますが、確認はしていません。