ボタンの相対座標を取得する方法は存在するのでしょうか – プログラミング – Home

ボタンの相対座標を取得する方法は存在す...
 
通知
すべてクリア

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


ハヤト
 ハヤト
(@ハヤト)
ゲスト
結合: 24年前
投稿: 7
Topic starter  

職業:プログラマーです。

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


引用未解決
トピックタグ
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

CWnd::ChildWindowFromPoint()というメソッドがありますが、
これをうまく利用できないでしょうか?


返信引用
ハヤト
 ハヤト
(@ハヤト)
ゲスト
結合: 24年前
投稿: 7
Topic starter  

レス有難うございます。さっそくやってみます。

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


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

>ダイアログ上のボタンの相対座標を取得する方法がどうしても見付かりません。

CWnd::GetClientRect()でわ?

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


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

or

CWnd::GetWindowRect
+
CWnd::ScreenToClient


返信引用
ハヤト
 ハヤト
(@ハヤト)
ゲスト
結合: 24年前
投稿: 7
Topic starter  

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

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

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

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

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


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 80
 

ひょっとしてダイアログに対して使ってませんか?

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

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

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


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

ハヤトさんの実力がわからないので

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
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

よー、かぶりまんな~(爆)

た~たららららら たたらら~。

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

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

ゴミです。m(__)m

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

GetClientRect(&rect); // は

this->GetClientRect(&rect); // の意味です

ご存知でしたら、 m(__)m


返信引用
ハヤト
 ハヤト
(@ハヤト)
ゲスト
結合: 24年前
投稿: 7
Topic starter  

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました