マウスのクリック位置がずれる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dic
記事: 582
登録日時: 9年前
住所: 宮崎県

マウスのクリック位置がずれる

#1

投稿記事 by dic » 9年前

マウスで操作をうけつけるように画像の水色の部分(100,100)-(200,200)の領域に
うけつける部分を設定して、わかるように色をつけました
そして、クリックの判定を行おうとすると、どうしてもy座標が20ドットくらい下にずれるのです
おそらくウィンドウ座標とクライアント座標のずれかなと思っているので
タイトルバーの座標をプラスすればいいと思ってます
そこで、タイトルバーの大きさの取得方法を教えてもらえないでしょうか?

画像の赤い部分のちょっとずれているところで反応するのです
添付ファイル
無題.JPG
無題.JPG (47.72 KiB) 閲覧数: 2831 回

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: マウスのクリック位置がずれる

#2

投稿記事 by softya(ソフト屋) » 9年前

すいません、DXライブラリだとちゃんとクライアント領域だとおもいますが、ライブラリ/APIは何ですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Blue

Re: マウスのクリック位置がずれる

#3

投稿記事 by Blue » 9年前

タイトルバーの高さ分だけ下にずれている?

dic
記事: 582
登録日時: 9年前
住所: 宮崎県

Re: マウスのクリック位置がずれる

#4

投稿記事 by dic » 9年前

>>softyaさん
>すいません、DXライブラリだとちゃんとクライアント領域だとおもいますが、ライブラリ/APIは何ですか?
説明不足でした
DXライブラリは使用していないです

>>Blueさん
>タイトルバーの高さ分だけ下にずれている?
おそらくの予想です

ウィンドウプロシージャでマウスの座標を取得しています
コードはしたのようにしています

コード:

	case WM_LBUTTONDOWN:
		x = lParam & 0xFFFF;
		y = (lParam>>16)&0xFFFF;
		DEF_DXDRAW->LButtonDown( x, y );
		break;

アバター
Ciel
記事: 252
登録日時: 9年前

Re: マウスのクリック位置がずれる

#5

投稿記事 by Ciel » 9年前

そもそも、画像の水色の部分の描画位置がずれてるんじゃないですか?
oui C'est la Vie♪

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: マウスのクリック位置がずれる

#6

投稿記事 by softya(ソフト屋) » 9年前

WM_LBUTTONDOWNはクライアント領域の座標だと思いますんで、やはり他の描画がクライアント領域ではないのでは?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

dic
記事: 582
登録日時: 9年前
住所: 宮崎県

Re: マウスのクリック位置がずれる

#7

投稿記事 by dic » 9年前

>>Ciel さん
>そもそも、画像の水色の部分の描画位置がずれてるんじゃないですか?
(0,0)-(100,100) と (100,100)-(200,200) を描画して試してみましたが
描画の方にズレはありませんでした
念のためクリックしたときの位置も画面に表示するようにしましたが、ズレてはいませんでした

しかし気になることがありました
SetWindowPos( hwndApp, NULL, 100, 100, 640, 480, NULL );
でウィンドウの大きさを調整しているのですが、このときの 640, 480 のサイズはタイトルバーを含めての
ウィンドウ全体の大きさな気がしてきました・・・

アバター
みけCAT
記事: 6297
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: マウスのクリック位置がずれる

#8

投稿記事 by みけCAT » 9年前

dic さんが書きました:しかし気になることがありました
SetWindowPos( hwndApp, NULL, 100, 100, 640, 480, NULL );
でウィンドウの大きさを調整しているのですが、このときの 640, 480 のサイズはタイトルバーを含めての
ウィンドウ全体の大きさな気がしてきました・・・
たぶんそうだと思います。
必要ならこのクライアント領域のサイズを指定してウィンドウをリサイズする関数を使ってみてください。
hWnd:ウィンドウハンドル
x:横の大きさ
y:縦の大きさ

コード:

void wndresizebyclient(HWND hWnd,int x,int y) {
	RECT size;
	RECT wndsize;
	GetClientRect(hWnd,&size);
	GetWindowRect(hWnd,&wndsize);
	wndsize.right=wndsize.right-wndsize.left;
	wndsize.bottom=wndsize.bottom-wndsize.top;
	SetWindowPos(hWnd,NULL,0,0,x+wndsize.right-size.right,y+wndsize.bottom-size.bottom,SWP_NOMOVE | SWP_NOREPOSITION | SWP_NOZORDER);
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

dic
記事: 582
登録日時: 9年前
住所: 宮崎県

Re: マウスのクリック位置がずれる

#9

投稿記事 by dic » 9年前

>>softyaさん
数秒違いで書き込みました
みけCATさんの方法で解決しました

>>みけCATさん
書き込んだソースを適応したらうまく、クライアントの領域が640x480になりました

softyaさん Blueさん Cielさん みけCATさん
ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る