プロが教える店舗&オフィスのセキュリティ対策術

VisualC++.netを利用してプログラムの練習をしています。そこで、

SetWindowOrg()と
SetViewportOrg()の違いがいまひとつ分かりません。

また、
ウインドウは描画関数で指定する座標系
ビューポートはデバイス側の座標系

という意味もよく分かりません。

できればわかりやすく教えていただければ幸いです。

A 回答 (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)に描こうとするので
表示位置は全体的に右下にずれます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/06/16 21:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!