- ウインドウの位置とサイズの取得 -



起動しているウインドウの位置とサイズの取得方法。
ウインドウ情報の取得にはCWndクラスのGetWindowRect()関数を使用します。



□ MSDNよりMoveWindowの引用 □

 void GetWindowRect( LPRECT lpRect ) const;

   ・void型なので戻り値はなし
   ・lpRectは左上隅と右下隅のスクリーン座標を受け取る
    CRect オブジェクトまたは RECT 構造体

   GetWindowRectによって取得された座標が
   CRectオブジェクトに格納されます




サンプルではツールバーにボタンを作成し、ボタンをクリックしたらウインドウの位置とサイズを取得し表示するプログラムを作ってみます



≪ MFC SDIでの作成サンプル ≫


 ■ツールバーにボタンを作成

      

      ※サンプルではボタンのIDを ID_MENUBUTTON としています





 ■ClassWizardよりViewクラスに作成ボタンのクリックイベント関数を追加

      

      ※クラス名 → C***View
      ※オブジェクトID → ID_MENUBUTTON
      ※メッセージ → COMMAND





 ■作成した関数にソース追加
//////////////////////////
// CWind01View クラスのメッセージ ハンドラ

void CWind01View::OnMenubutton()
{
// TODO: この位置にコマンド ハンドラ用のコードを追加してください

//CWnd へのポインタを作成
CWnd* i;

//幅、高さ、X座標、Y座標の格納変数の作成
CString w,h,x,y;

//ウインドウ座標取得用CRect型オブジェクトRect01を作成
CRect Rect01;


//メインウインドウのポインタ取得
i = GetParent();

//ウインドウの位置とサイズを取得
i->GetWindowRect(Rect01);


//---------(表示処理・ここから)----------

//デバイスコンテキストのポインタの取得
CDC* pDC = GetDC();

//ウインドウ左上のX座標を取得、表示
//Rect01.leftはウインドウ左上のX座標
x.Format("%d",Rect01.left);
pDC->TextOut(0,0,"                ");
pDC->TextOut(0,0,"ウインドウのX座標 → " + x);

//ウインドウ左上のY座標を取得、表示
//Rect01.topはウインドウ左上のY座標
y.Format("%d",Rect01.top);
pDC->TextOut(0,20,"                ");
pDC->TextOut(0,20,"ウインドウのY座標 → " + y);


//ウインドウの幅を取得、表示
//Rect01.rightはウインドウ右下のX座標
w.Format("%d",Rect01.right-Rect01.left);
pDC->TextOut(0,40,"                ");
pDC->TextOut(0,40,"ウインドウの幅 → " + w);

//ウインドウの高さを表示
//Rect01.bottomはウインドウ右下のY座標
h.Format("%d",Rect01.bottom-Rect01.top);
pDC->TextOut(0,60,"                ");
pDC->TextOut(0,60,"ウインドウの高さ → " + h);

//デバイスコンテキストの開放
ReleaseDC(pDC);

//---------(表示処理・ここまで)----------
}

Rect01.right-Rect01.left は右のX座標から左のX座標を引く事でウインドウの幅を取得しています

Rect01.bottom-Rect01.top は下のY座標から上のY座標を引く事でウインドウの高さを取得しています





 ■以上、コンパイルすれば完成

      

      ツールバーに作成したボタンをクリックすると
      現在のウインドウ位置とサイズを取得し表示します