Last Updated 2003/11/05
Programming Tips Windows  索 引 
OSの違いによる GetDeviceCaps(HORZSIZE) の値
2003/11/05

画面の解像度に関係なく一定の大きさで表示するにはマッピングモードを MM_LOMETRIC に設定すればよい.(SetMapMode()使用)
WindowsNT4.0 では VGA(640x480) でも XGA(1024x768) でも同じ大きさで表示可能である.
しかし,Windows95 ではディスプレイの解像度により大きさが変化してしまう.
これは GetDeviceCaps(HORZSIZE) で返ってくる値によっても確認が可能である.

WindowsNT4.0 では GetDeviceCaps(HORZSIZE) にて常に 320 が返ってくるが,Windows95 では解像度で返ってくる値が変化する.
  640x480   -> 169
  800x600   -> 211
  1024x768  -> 270
  1280x1024 -> 304

この回避方法は,Windows95 の時に描画の座標を変更するしかない.

  int n = pDC->GetDeviceCaps(HORZSIZE);
  float nAps = (float)n / 270;  // 95で1024*768に帰った値(270)
  pDC->Rectangle(100 * nAps, -100 * nAps, 300 * nAps, -300 * nAps);

上記にてどの解像度でも同じ大きさで描画できる.

Inside Visual C++ Ver4 の書籍で以下の記述がある.
「画面には物理単位と論理単位があって Win3.1 では一致していなかった。線描コードがプリンタとディスプレイの両方で働くことを想定すると、プリンタの物理インチとディスプレイの論理インチを合わせるために、二つのデバイスで異なるマッピングモードを使うことを考えなければならなかった。
しかし、Win95 と新バージョンのWinNT では、物理サイズと論理サイズは同じになっている...」



参照
前後のTips
OSの違いによる GetDeviceCaps(HORZSIZE) の値

DSS ProgrammingTipsCGI Ver2.02