- ベストアンサー
ダイアログ内コントロールの位置取得について
いつもお世話になっております。 ダイアログ内に配置されているコントロールの位置の取得方法について ご教授頂きたく質問させていただきました。 私が試したところGetWindowRect( コントロールハンドル, &rc ); とするとありえないぐらい大きな座標が帰ってきます。 上記の方法ではうまくいきません。 ご教授よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>http://msdn.microsoft.com/ja-jp/library/cc364604.aspx より >クライアント座標はクライアント領域の左上端からの相対座標なので、左上端の座標は常に (0,0) となります。 となっているため >GetClientRectでダイアログ内の相対位置を取れます。 は間違っていました。 >もしかしたら便利な関数が存在するのでしょうか? ないのかなぁと。 かわりにこんな関数を作っておくとか。 BOOL GetDlgItemRect(HWND hDlg, int nIDDlgItem, RECT* rct) { BOOL bRet = FALSE; HWND hWnd = GetDlgItem(hDlg, nIDDlgItem); if (hWnd != NULL) { bRet = GetWindowRect(hWnd, rct); { bRet = ScreenToClient(hDlg, rct); } } return bRet; }
その他の回答 (1)
- bluecampus
- ベストアンサー率66% (138/209)
GetClientRectでダイアログ内の相対位置を取れます。 GetWindowRectからならScreenToClientで変換します。
お礼
ご回答ありがとうございます。 1.GetClientRectで取得してみたところ、コントロールの幅と高さは取得 できますが、位置( left, top )は取得できませんでした。 2.GetWindowRectで取得し、left,topの値をPOINT型の変数に入れてから ScreenToClientを行うと正常な値が取得できました。 ありがとうございました。 2.で成功するのですが、ここまで手間がかかると大変ですね。 もしかしたら便利な関数が存在するのでしょうか?
お礼
bluecampus様 丁寧な回答ありがとうございます。 勉強になりました。 私も便利な関数がないかと探したのですが見つからずbluecampus様 の作成されたように関数を作っておく事に決めました。 ご教授ありがとうございました。