ナビゲーションバーの高さ取得とタッチ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でも大丈夫なんじゃないかと思いますが、確認はしていません。

*1:ハイレゾに対応せずWM6.5.3向けの対応をするというのも微妙な話ではありますが