電子書籍の厳選無料作品が豊富!

いつもお世話になっております。

ダイアログ内に配置されているコントロールの位置の取得方法について
ご教授頂きたく質問させていただきました。

私が試したところGetWindowRect( コントロールハンドル, &rc );
とするとありえないぐらい大きな座標が帰ってきます。

上記の方法ではうまくいきません。
ご教授よろしくお願いいたします。

A 回答 (2件)

>

http://msdn.microsoft.com/ja-jp/library/cc364604 …
より
>クライアント座標はクライアント領域の左上端からの相対座標なので、左上端の座標は常に (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;
}
    • good
    • 0
この回答へのお礼

bluecampus様 丁寧な回答ありがとうございます。
勉強になりました。

私も便利な関数がないかと探したのですが見つからずbluecampus様
の作成されたように関数を作っておく事に決めました。

ご教授ありがとうございました。

お礼日時:2008/08/03 22:33

GetClientRectでダイアログ内の相対位置を取れます。


GetWindowRectからならScreenToClientで変換します。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

1.GetClientRectで取得してみたところ、コントロールの幅と高さは取得
できますが、位置( left, top )は取得できませんでした。

2.GetWindowRectで取得し、left,topの値をPOINT型の変数に入れてから
ScreenToClientを行うと正常な値が取得できました。
ありがとうございました。

2.で成功するのですが、ここまで手間がかかると大変ですね。
もしかしたら便利な関数が存在するのでしょうか?

お礼日時:2008/08/03 15:06

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A