• ベストアンサー

SetWindowOrgとSetViewportOrgの違い

VisualC++.netを利用してプログラムの練習をしています。そこで、 SetWindowOrg()と SetViewportOrg()の違いがいまひとつ分かりません。 また、 ウインドウは描画関数で指定する座標系 ビューポートはデバイス側の座標系 という意味もよく分かりません。 できればわかりやすく教えていただければ幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmb01
  • ベストアンサー率45% (63/138)
回答No.1

実験してないので違ってるかもしれませんが… > ウインドウは描画関数で指定する座標系 > ビューポートはデバイス側の座標系 たとえば Rectancle(hdc, 0, 0, 300, 200); は幅300ピクセル、高さ200ピクセルの長方形を描けという意味になります。 画面解像度が2倍になったとき(ピクセル数が同じなので) 長方形の見た目は半分の大きさになります。 SetMapMode(hdc, MM_LOMETRIC); Rectancle(hdc, 0, 0, 300, 200); は幅30mm、高さ20mmの長方形を描けという意味になります。 この場合何ピクセルの長方形が描かれるかは画面解像度に依存します。 画面解像度が2倍になれば、使用するピクセル数も2倍になり 大体同じ大きさの長方形を描きます。 描画関数(Rectancle)に渡している(0,0,300,200)という値は論理座標で、 実際に何ピクセル描かれるかが物理座標(デバイス座標)です。 > SetWindowOrg()と > SetViewportOrg()の違いがいまひとつ分かりません。 表示する位置をずらすという機能についていえば同じですが、 引数の座標系が違います。 両方を同時に使うことは避けるべきです。 SetWindowOrgEx(hdc, -100, -200, NULL); とすれば、ウィンドウの左上(もしくは左下)が論理座標(-100, -200)になります。 表示位置は全体的に右下(もしくは右上)にずれます。 (上にずれるか下にずれるかはSetMapModeによる) SetViewportOrgEx(hdc, 100, 200, NULL); とすれば、論理座標(0, 0)を物理座標(100, 200)に描こうとするので 表示位置は全体的に右下にずれます。

higenonorimaki
質問者

お礼

お返事ありがとうございます。 SetWindowOrgとSetViewportOrgは同時に使うものだと考えていました。論理とデバイスそれぞれの座標で位置を指定できるものだったんですね。

関連するQ&A