ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

MZ3 Debuggersコミュの【協力願い(特にX01HTユーザー)】RealVGA対応の確認

  • mixiチェック
  • このエントリーをはてなブックマークに追加
ちょっと目立たせたかったので新トピで失礼します。

RealVGAを判定する方法を思いつきました。
レジストリにdpi値を持ってるのでその値を取得して判定すればいいんだ。

↓そんなこたー知ってるよって方にはごめんなさい。(w

W-ZERO3やEM・ONEは液晶性能はVGA対応だけど内部的にDPI値を約2倍にして解像度を擬似的にQVGAにしてるんですよね。
RealVGA化してるのは96dpi
してないのは192dpi
になってます。
で、おそらくX01HTは液晶も表示も同じQVGAで96dpiだと思ってます。

で、お願いなのですが、いきなり本コミュの方にリリースするのはちょっと怖いのでこの対応はこちらの方々に一旦人柱になって欲しいのです。

私のローカルのソースではうまく行きました。

<現MZ3の仕様>
 解像度判定して
  320×240→QVGAで小さい画像をコマンドバーに表示
  640×480または800×480→VGAで大きい画像をコマンドバーに表示

<新しい仕様>
 解像度判定とは別の処理で
 レジストリのDPI値を取得
 96dpiなら小さい画像
 それ以外は大きい画像

 ※RealVGAやってる人のが少ないと思われるので96以外は全部大きい画像をデフォルトとしてしまって良いですよね?
 大小で判定した方が良いですかね?

初代W-ZERO3はRealVGA化してるのでそれと、W-ZERO3[es]のノーマルで確認済みです。
あと確認したいのはX01HTでうまくいけば大丈夫だと思うのでX01HTユーザーに一番確認して欲しいのですが誰か居ませんか?

問題なければTracに更新上げようと思うのですがどうでしょう?

何か意見があればください。

コメント(66)

** MZ3.i Ver.0.8.0.0 Beta13 (2007.05.25)
- 解像度判定を改善
- その他

http://www.mz3.jp/bin/MZ3.0.8.0.0b13.CAB

だいぶ処理を書き換えました。
今後のために DPI 値をプログラム全体から取得できるようにしました。
RegOpen/Closeは割と大雑把というかおおらかに作られているのでOpenできなかったNULLキーをCloseしても死なないですよw
そしてSR_SQUARE240でバーの高さが調整されているのを確認しますた。
ありがとうございますヽ(´ω`)ノ
> 27 たっけさん

お疲れさまですー。

> だいぶ処理を書き換えました。

とりあえずEM-ONEだけですが確認して特に問題ありません。
エラー処理追加ありがとうございます。
その辺はお任せします。

> 今後のために DPI 値をプログラム全体から取得できるようにしました。

こちらも了解です。
>>29
>できなかったNULLキーをCloseしても死なないですよw
実をいうとNULL初期化もしてなかったので怪しい場所をクローズしちゃうという罠w

>>30

確認ありがとうございます!

QVGA 環境でちゃんと動くかちょっぴり不安だったり。。。

>>31

>とりあえずEM-ONEだけですが確認して特に問題ありません。

了解です。
あとは RealVGA 環境での確認も欲しいかも。。。
> 32 たっけさん

> あとは RealVGA 環境での確認も欲しいかも。。。

もちろんするつもりですよ。
でも家にあるので帰ってからですね。
今日はそろそろ上がるか(w
概ね良好かと思いきや、日記やコミュニティ投稿後のリロード画面に出て来るプログレスバーとステータス表示の高さが二倍になってますた( ´ω`)
でも通常は一瞬で消えるものなのでぶっちゃけどうでも良い部分ですw
ReportView.cppの190行目あたりからも同じ処理がありますね。
あー修正忘れです、すんません。最近こんなんばっかww
ちょっとオフトピ気味ですが、ご相談。

今回問題になっている下記の処理ですが・・・
  int hInfo   = fontHeight - 4;
  if( theApp.GetDisplayMode() == SR_VGA ) {
    hInfo   = fontHeight +12;
  }
DPI が2倍であるという点を考えると、「VGA なら +12」ではなく、
  int hInfo   = fontHeight - 4;
  if( theApp.GetDisplayMode() == SR_VGA ) {
    hInfo   = (fontHeight - 4) *2;
  }
が正しい計算式なのかなぁ、と思いました。
もちろん、現在の値とは若干異なりますが、上記の計算式のほうが汎用的かつ意味のある値になってよいかと。
# 実を言うと +12 とか -4 の「意味」が分からなくて
# ずっと悩んでいました。
# 謎のマジックナンバーは気持ち悪くて仕方ないのです・・・。

さらに DPI 値を使うなら
  int hInfo   = fontHeight - 4;
  if( theApp.GetDPI() > 96 ) {
    hInfo   = (fontHeight - 4) * 2;
  }
とか。

計算式を整理すると、
  int hInfo = fontHeight - 4;
  if( theApp.GetDPI() > 96 ) {
    hInfo *= 2;
  }
になるのではないかと思います。

こうすると -4 だけがマジックナンバーになりますし、
これを SG 値もとい、ini で変更可能にすればカスタマイズ性も上がるかと。
たぶんその「4」はGetSystemMetrics(SM_CYBORDER)あたりだと思うんですよね(;´ω`)
VGAなら+12っていうのはWindowsMobile2003と5.0でGetSystemMetrics(SM_CYMENU)あたりの戻り値が違うので固定値を突っ込むのが一番ラクだからだと思います。

WM5.0への遷移時期に似たようなコードを書いてますた(;´Д`)

>>39
なるほど了解です。
セオリーとしては確かに GetSystemMetrics() から取得すべきですよねー。
ちょっと調べてみまふ。
最後の計算式整理版でいいのではないかと。
そういう所はなるべく改善していくので良いかと思います。
オープンソースですしね。

動作確認はしますよー。
>>36
SS ありがとうございます!

で、「作者の意図」としては実はちょっとNGに見えますw
タブの下側に若干の空白(隙間)がありますよね。
これを本当は無くしたいです。

GetSystemMetrics のどれかの値かなとも思いますが、
そもそも一般的なタブの使い方ではないのでそんな値用意してくれてるのか謎だったりw
細かい事を言うとRealVGAだとツールバーの上のステータス表示が上詰めになって見えて文字の下に空白がありますよね?
これも根っこでフォントの幅+2とかやってるから二倍になって+4ピクセルとかになっちゃってるんじゃないでしょうか。

VGA対応はそういう部分がかなり多くて、バイナリ1本で提供すると表示毎に解像度チェック→VGAだったら二倍のオフセット値というのが非常にもったいなく思えてきます(;´Д`)
確かに GetSystemMetrics の値が違う(信用ならない)・・・w

仕方ないのでマジックナンバーでいきますよw

とりあえずW-ZERO3[es]/非RealVGA環境でうまく見えるようなのを作ってみます。
それにしても週末の昼間だってのにみんなハック好きねw
それか微調整はすっぱりと諦めて、MUIを誰かが作って提供するかでしょうね。(w
MUIという選択肢もあるのですが、DeviceContextに対してカスタム描画する部分で座標系が出てくるとやっぱり同じ事になります(;´Д`)

加えてタテ画面、ヨコ画面、スクエアとありますし、今後はWVGAとかも(ry
38 の計算式でやってみましたが、全然ダメでしたw

やはり謎のマジックナンバー "+12" が最適値のようで・・・。
  int hInfo   = fontHeight - 4;
  if( theApp.GetDisplayMode() == SR_VGA ) {
    hInfo   = fontHeight +12;
  }

元のコード(上記)をベースに仮修正版を作ってみました。
メイン画面だけ書き換えています。

http://www.mz3.jp/bin/MZ3.0.8.0.0b14a.CAB

【お願い】
大変申し訳ないのですが、この版でのメイン画面がどうなるのか、SS をいただけないでしょうか。

欲しいSS:RealVGAなW-ZERO3、QVGA環境(X01-HT)

【該当ソース抜粋】
下記のように書き換えてみますた(退化してますw)。

  // 画面下部の情報領域
  int hInfo   = fontHeight - 4;
  if( theApp.GetDisplayMode() == SR_VGA ) {
    if( theApp.GetDPI() > 96 ) {
      // VGA かつ非RealVGA環境
      hInfo   = fontHeight +6*2;
    }else{
      // VGA かつRealVGA環境
      hInfo   = fontHeight +6;
    }
  }

  // グループタブ
  int hGroup  = fontHeight + 6;       // デフォルト値
  if( theApp.GetDisplayMode() == SR_VGA ) {
    if( theApp.GetDPI() > 96 ) {
      // VGA かつ非RealVGA環境
      hGroup  = fontHeight +12;
    }else{
      // VGA かつRealVGA環境
      hGroup  = fontHeight + 8;
    }
  }
ちょっとこれからお出かけするので夜にQVGAとスクエアのキャプチャをうpします( ´ω`)
> 49 たっけさん

良さそうですね。
しかしKTCaptで撮ったキャプチャをそのままMZ3で送れるのは便利ですねぇ(w

念のためフォントサイズも変えてみました18と12ポイントです。
>>50
了解です♪

>>51
ありがとうございます!

コードとしては納得がいかないんですが、見た目はよさげですね。
キャプチャしますたヽ(´ω`)ノ
納得いかないのは激しく同意しますが世の中そんなもんですw
キャプありがとうございます。
予想通りタブサイズが微妙ですねw
いま外にいるんで明日あたりに直します。
>>53
ピクセル数で計算してジャストフィットする値にしてみましたw
さらに引用画面と書込画面も文字サイズで各領域の高さが可変になるように修正しました。

** MZ3.i Ver.0.8.0.0 Beta14 (2007.05.26)
- 「未読を巡回」機能を追加。
- 非VGA環境での表示を改善。
- その他

http://www.mz3.jp/bin/MZ3.0.8.0.0b14b.CAB

「未読を巡回」機能は本トピではスルーでw
乙です( ´ω`)
スクエアだとリストビューのカラムヘッダ表示を無くしたい気がするのですが、他の皆さんはQVGAの横表示でそういう気分にならないですかね?
既に遅いかもですが念のため最新リリース版のキャプチャ上げておきますね。

RealVGAは特に問題ないです。
↑いいですね。

これを期にRealVGAかしてみようかな。
>>いっちゅうさん、仕事人さん

キャプありがとうございましたm(_ _)m
安心しましたw

リストヘッダ非表示は機能としてあってもよいかも。。。

>>61

私も RealVGA に惹かれてきましたw
そういやたっけさんはエミュレータの日本語化ってしてないんですか?
エミュレータのRealVGAはちょっと難アリですが、QVGAぐらいは支障無くテストできますよ。( ´ω`)
>>63
日本語化してありますが、Beta14 だと SS のように思いっきり画面が乱れています(><)。。。

タブが低い&下のバーが消えてるわけです。
Beta13 までだとタブの高さは最適に見えていたんですね。

エミュレータに何かセッティングが必要なのでしょうか・・・。
大分前ですがPocketPC2003時代にそんな現象を見た覚えが…
ウインドウ/ダイアログを作る時にWM_SIZEが数度飛んでくるのですが、メニューバーかタイトルバーの高さが飛んで来る度に変わっていることがありますた。
WM_SETTINGCHANGEで最終的な文字サイズをとる様にして直した気がありますがうろ覚えなので違ってたらすんません(;´ω`)
情報ありがとうございます!

確かにWM_SIZEが大量に飛んできますね。
そのたびにリサイズしてるMZ3って(ry

起動時にやけに無駄な動きをしてるのはこのためでしたか。
うーん、なおしたいけどそろそろ新機能に手を付けたい今日この頃w

ログインすると、残り27件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

MZ3 Debuggers 更新情報

MZ3 Debuggersのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング