マウス座標がウインドウ外にある時を判定するには?


クリ  2005-09-04 09:07:39  No: 58858

マウスがクライアント領域から外側に出たときを判定したいのですが、
マウスがそのウインドウ内に無いなどという風に返す関数などはないのでしょうか?
ご教授よろしくお願いします。


リンク  2005-09-04 23:08:34  No: 58859

>マウスがそのウインドウ内に無いなどという風に返す関数
全部の関数を知っているわけではないですが、ないでしょう。

やりたいことをするならタイマーで逐次チェックかフックによる監視でしょうね。

# 環境(OS,VCのバージョン等)は書きましょう。


とおり  2005-09-04 23:37:43  No: 58860

>>マウスがそのウインドウ内に無いなどという風に返す関数
>全部の関数を知っているわけではないですが、ないでしょう。

本当ですか?
対象ウィンドウが任意の形状を持っていたとしても、リージョン(CRgn)を取得して
PutInRegion等で出来そうな。
(矩形ウィンドウなら、そんなことせずとも)

質問者が聞いているのは、ウィンドウ内外の判定関数であって、外側に出た瞬間を
知る関数を知りたいとは(文章から忠実には)読めませんでしたが…


DD.  2005-09-05 00:10:25  No: 58861

クライアント領域を取得することはAPIでできるのだから、
それとマウス座標で簡単に判定できるかと思われます。


リンク  2005-09-05 02:53:13  No: 58862

>質問者が聞いているのは、ウィンドウ内外の判定関数であって
厳密にはPtInRegion(PtInRect)はウィンドウ内外の判定関数ではないですよね。
指定範囲との判定関数ですよね。

ウィンドウハンドルとマウス位置があれば判定してくれる関数は
「ないでしょう」という意味です。
(というか厳密には知らないだけですが。あるなら逆に教えてほしい)

けど、確かに
>>マウスがそのウインドウ内に無いなどという風に返す関数
>全部の関数を知っているわけではないですが、ないでしょう。
これだけでは言葉足らずでしたね。

あと、「外側に出たときを判定したい」という言葉があったので
私は「外側に出た瞬間を知る関数を知りたい」と読みました。
深読みなのかなぁ?
こっちのことが聞きたいのかと思ってタイマーとかフックとか書いたのですが。

この辺はクリさんが書き込んでくれる以外はどうしようもないですけど。


とおり  2005-09-05 06:16:25  No: 58863

>ウィンドウハンドルとマウス位置があれば判定してくれる関数は
>「ないでしょう」という意味です。
>(というか厳密には知らないだけですが。あるなら逆に教えてほしい)

だから、ウィンドウに対するリージョンを取得して、と言ってるんですが。


リンク  2005-09-05 18:00:56  No: 58864

うぅ、なんか話がかみ合わないなぁ。
私:「ないでしょう」とおりさん:「本当ですか?」に答えただけですよ。
2回目の書き込みはあるかないかを論点としています。
やり方ではありません。

>だから、ウィンドウに対するリージョンを取得して、と言ってるんですが。
だから結局、
ウィンドウハンドルとマウス位置があれば判定してくれる「関数そのもの」は
お互い「ない、もしくは知らない」で問題ないわけでしょう?

1回目の書き込みは言葉足らずだったと書いたはずです。


リンク  2005-09-05 18:49:45  No: 58865

うまくまとまらないうちに書いたので、
今みると少し喧嘩を売ってるようにも見えるかも。
うまくは言えないけどこういうことです。

私:「ないでしょう」
とおりさん:「本当ですか?」
私:「これこれこういうことでこういう関数は「ないでしょう」」
とおりさん:「だから、こうすればいいのではと言っている」

自分としてはとおりさんの「本当ですか?」に答えただけなので
「確かにそんな関数はない」とか「こういう関数がある」
と言う答えを期待してたわけで、
「だから〜」と言われても「話がかみ合ってないような・・・」となるわけです。

1回目は言葉足らずだったと書きました。
2回目はあの説明で「関数そのもの」(=1発で出来る関数)と言うのはこれで分かると思いました。
3回目で「関数そのもの」(=1発で出来る関数)と明示しました。
私がここで問題にしている関数とは「関数そのもの」(=1発で出来る関数)です。

# 3回目の書き込みが喧嘩を売ってるように見えたら申し訳ない。m(_ _)m


n  2005-09-05 19:27:43  No: 58866

任意のタイミングで GetCursorPos + WindowFromPoint で判別とか、
通知なら TrackMouseEvent + WM_MOUSEHOVER とか。


とおり  2005-09-05 21:12:57  No: 58867

>私がここで問題にしている関数とは「関数そのもの」(=1発で出来る関数)です。

GetWindowRgn
PutInRegion

上記2APIの処理が、1発で出来る関数と比べて、どれほどの違いがあるのですか?
↑の処理を1関数にして、それを呼び出すのと何か"有意な"違いがあるのですか?
問題の本質と全く無関係な瑣末な話で、理解不能です。

だいたい「ウィンドウハンドルとマウス座標から"一発で"取り出す」なんて話は、
あなたが勝手に言い出した話でしょ??
なぜ、そこまで"完全に厳密に"付き合わなきゃならないのか…


uud  2005-09-05 22:02:14  No: 58868

KB183107 SDK32:カーソルがウィンドウ外に移動したことを検出する
http://support.microsoft.com/default.aspx?scid=kb;ja;183107
とか、相変わらず未確認です。


リンク  2005-09-05 23:48:28  No: 58869

これ以上、質問と無関係な話で書き込むのは板が汚れるのでやめます。

クリさんがどうしたいのか、わからないし。
このスレを見て不快に思われた方、申し訳ありませんでした。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加