ボタンの相対座標をもとめて移動させる


hWnd はボタンが配置されているウィンドウのハンドルとし、
button_hWnd は移動するボタンのハンドルとします。


	POINT pt;
	RECT re;
	GetWindowRect(button_hWnd,&re);		//ボタンの画面上の座標を取得
	pt.x=re.left;				//POINT構造体に代入
	pt.y=re.top;

	//この時点ではptにはボタンの絶対座標が入っている

	ScreenToClient(hWnd,&pt);			//ボタンの座標をクライアントの座標に変換

	//この時点でptにボタンの相対座標が入る

	GetClientRect(button_hWnd,&re);		//ボタンのサイズを取得

	MoveWindow(button_hWnd,pt.x+10,pt.y+10,re.right,re.bottom,1);//X,Y軸を+10してボタンを移動




▲上記プログラムでコントロールの相対座標を求めることが出来、
そのコントロールを任意に移動させる事が可能です
GetClientRect を使わなくても、GetWindowRectの時点でボタンサイズがわかるため、
その値でもとめたほうがいいかもしれません。

hWnd にウィンドウズの電卓のウィンドウのハンドルを与え、
button_hWnd に電卓の 4 のボタンのハンドルを与えて上記プログラムを実行してみました
 4 のボタンが X座標+10、Y座標+10 に移動しているのが確認できます。










▲トップページ > Windows と C++