ボタンの相対座標を取得する方法は存在するのでしょうか

[戻る]
ハヤト 2002/04/23(火) 14:56:42
職業:プログラマーです。

仕事でOnLButtonDown関数とOnLButtonUp関数でマウスの左ボタンを
押しっぱなしの間処理するプログラマムを作ってます。
ダイアログ上にボタンがあり、そのボタンを押してる間に処理する
プログラマムです。
ダイアログには複数のボタンがあり、どのボタンが押されたかを
判断する必要があります。
そこで、マウスポインタの相対位置はCPointクラスで取得出来ますが
ダイアログ上のボタンの相対座標を取得する方法がどうしても見付かりません。
MFCに取得する関数は存在するのでしょうか。
ボタンの左上、右下の座標が取得出来ればと思うのですが、
GetWindowRectでは、ディスプレイ上のフォームビューの相対座標を
取得する関数のようなので、ボタンの座標を求める方法がわからなくて
切羽詰ってます。

sugar 2002/04/23(火) 15:06:11
CWnd::ChildWindowFromPoint()というメソッドがありますが、
これをうまく利用できないでしょうか?

ハヤト 2002/04/23(火) 15:12:22
レス有難うございます。さっそくやってみます。

OS:WindowsS2000
ツール:VC++ Ver6.0
環境の説明が不十分でした。御免なさい。

Bun 2002/04/23(火) 15:21:12
>ダイアログ上のボタンの相対座標を取得する方法がどうしても見付かりません。

CWnd::GetClientRect()でわ?

意味が違うのかなぁ。(。_゜)?

不良PG 2002/04/23(火) 15:59:44
or

CWnd::GetWindowRect
        +
CWnd::ScreenToClient

ハヤト 2002/04/23(火) 19:25:04
sugarさん有難うございます。
>CWnd::ChildWindowFromPoint()というメソッドがありますが、
>これをうまく利用できないでしょうか?

 子ウインドウのポインタを取得するMFCですが、
 無効になってるボタンをクリックして、デバックすると
 確かにボタンクラスという認識があります。
 ただ、ボタンのリソースIDなどの
 識別出来るものは今のところ見付かっていません。 
 
Bunさん有難うございます。
>CWnd::GetClientRect()でわ?

 これだと
 ダイアログの
 相対座標(大きさ)は取得出来るのですが。  

不良PGさん有難うございます。
>CWnd::GetWindowRect
>        +
>CWnd::ScreenToClient

 こちらも
 ダイアログの相対座標を持ってくるのに
 使用するみたいです。

不良PG [E-Mail] 2002/04/23(火) 19:31:34
ひょっとしてダイアログに対して使ってませんか?

ボタンに対して使いましょう。

(ボタンオブジェクト).GetClientRect()
(ボタンオブジェクトのポインタ)->GetClientRect()
GetDlgItem(ボタンのコントロールID)->GetClientRect()


CWnd::GetWindowRect
CWnd::ScreenToClient
こちらも同様

Bun 2002/04/23(火) 19:45:12
ハヤトさんの実力がわからないので

ChogeDlg::hoge() // Dialog Classの とある関数で
{

  CRect rect;

  GetClientRect(&rect);
  TRACE("Dialog = %d %d %d %d\n", rect.left, rect.right, rect.top, rect.bottom);

  GetDlgItem(IDC_BUTTON1)->GetClientRect(&rect);
  TRACE("Button = %d %d %d %d\n", rect.left, rect.right, rect.top, rect.bottom);

}

これぢゃダメ?

ダメなら、もう少し具体的に何をしたいか教えて下さい。(^^;

Bun 2002/04/23(火) 19:54:20
よー、かぶりまんな〜(爆)

た〜たららららら たたらら〜。

曲名:かぶりつづけるボレロ。

作詞:不良PGさん
作曲:Bun

ゴミです。m(__)m

------------------------------------
Dialog Class 内において

GetClientRect(&rect); // は

this->GetClientRect(&rect); // の意味です
  
ご存知でしたら、 m(__)m

ハヤト 2002/04/23(火) 22:02:26
[[解決]]
Bunさん、不良PGさん
有難うございました。かぶったのが幸い良くわかりました。
社内で先輩に聞きづらい事などあるので、
掲示板の存在がとても助かりました。

   CRect fff;
   GetDlgItem(IDC_BUTTON_C3_OC)->GetWindowRect(&fff);
  ScreenToClient(&fff);

 でダイアログ上でのボタンの座標をGet出来ました。
 

   CPoint  point; 
  BOOL    lll;
   lll  =  fff.PtInRect(point);

 でポイントした位置がボタン上かどうかの判断を下す
 事も出来ました。
 
 VCを始めて10ヶ月ですが、まだまだ自分は
 初心者のようです。

 また、疑問がありましたら宜しくお願いします。m(__)m

古いスレッドには追加発言できません。