プログラミングメモ →目次

SetWindowOrgとSetViewportOrg(VC++)

SetMapMode()関数を呼び出された時に、描画領域の座標軸の方向が決められています。例えば、SetMapMode(MM_LOMETRIC)を呼び出すとY軸の方向は上になり、X軸の方向は右になります。論理描画領域座標系の原点は、画面のクライアント区域の左上の角と重なっています。別の設定がなければ、描画領域に何かを表示する為に、X座標値は正でY座標値は負で描画しないと何も表示できません。
 

例1、下のプログラムで、画面上に正方形を表示することができません。
pDC->SetMapMode(MM_LOMETRIC); 
pDC->Rectangle(0, 0, 200, 200); 

SetWindowOrg()関数は、論理描画領域の原点を論理単位で移動させる機能を持っています。
例2、下のプログラムで、画面上に正方形の一部しか表示できません。
pDC->SetMapMode(MM_LOMETRIC); 
pDC->SetWindowOrg(100, 100); 
pDC->Rectangle(0, 0, 200, 200); 

SetViewportOrg()関数は、デバイスの単位(ピクセル)で、論理描画領域の原点を物理の描画領域上で移動させます。
例3、下のプログラムで、論理描画領域の原点をピクセル単位で画面の真ん中に移動させるので、画面上に正方形をすべて表示することができます。
CRect rect;
GetClientRect (&rect);
pDC->SetMapMode(MM_LOMETRIC); 
pDC->SetWindowOrg(100, 100); 
pDC->SetViewportOrg(rect.Width()/2, rect.Height()/2); 
pDC->Rectangle(0, 0, 200, 200);

もちろん、Rectangle()のような描画関数に用いられる座標は、論理座標です。