「WM_MOUSEMOVE」について



 ◇-?「WM_MOUSEMOVE」について-しん-09/04-13:13(367)-No.483087
   ┣?!Re:「WM_MOUSEMOVE」について...-ヒロ-09/04-14:07(366)-No.483095
   ┃ ┗?!!Re:「WM_MOUSEMOVE」について...-しん-09/04-16:35(363)-No.483106
   ┃   ┣?!!!Re:「WM_MOUSEMOVE」について...-ヒロ-09/04-18:32(361)-No.483112
   ┃   ┗?!!!Re:「WM_MOUSEMOVE」について...-jtaka[BJCB]-09/04-18:38(361)-No.483114
   ┃     ┗?!!!【解決】Re:「WM_MOUSEMOVE」...-しん-09/05-08:43(347)-No.483134
   ┗?!Re:「WM_MOUSEMOVE」について...-からあげも食べたい-09/04-20:14(360)-No.483120

▲このページのトップに戻る
483087「WM_MOUSEMOVE」についてしん URL2009/09/04-13:13

メーカー名:東芝
OS名:WindowsXp
パソコン名:PAEX522PDE3
--
「WM_MOUSEMOVE」についてお願いします。

・連続的に「WM_MOUSEMOVE」を受け、処理していますが
・今発行されたメッセージの一つ前の情報はどこかで知る事が出来るのでしょうか
・現在は下記の方法で対応しています。


case WM_MOUSEMOVE:
pt.x = LOWORD(lp)-ppt.x; //MOUSE_X座標
OffsetRect(&data[S].Rect,pt.x ,0);
ppt.x=LOWORD(lp); //MOUSE_X座標
break;

▲このページのトップに戻る
483095Re:「WM_MOUSEMOVE」についてヒロ 2009/09/04-14:07

記事番号483087へのコメント
しんさんは No.483087「「WM_MOUSEMOVE」について」で書きました。

WM_LBUTTONDOWNまたはWM_RBUTTONDOWNで拾うのはダメ?
(マウスのボタンを押す事を前提にした場合)

▲このページのトップに戻る
483106Re:「WM_MOUSEMOVE」についてしん 2009/09/04-16:35

記事番号483095へのコメント
ヒロさん 有難うございます。

・OffsetRect()で連続的に移動する事を希望しています。
・WM_LBUTTONDOWN又はWM_RBUTTONDOWNで連続移動作業を中断する事は?

何処かで直前の「WM_MOUSEMOVE」の値を知りたいです。

機能的には掲載のコーテイングで出来るのですが
Windowsの固有の機能(関数)から出来ないかと考えています。

▲このページのトップに戻る
483112Re:「WM_MOUSEMOVE」についてヒロ 2009/09/04-18:32

記事番号483106へのコメント
しんさんは No.483106「Re:「WM_MOUSEMOVE」について」で書きました。

基本的にメッセージキューから取り出したメッセージを処理してしまうとメッセージ
は破棄されるので、過去のメッセージを取り出すのは無理ではないかと。
(メッセージキューに溜まっている中から特定のメッセージを取り出す事は出来た
ような気が)

なのでWM_MOUSEMOVEメッセージの処理毎に値を保持するしかないのでは?


▲このページのトップに戻る
483114Re:「WM_MOUSEMOVE」についてjtaka[BJCB] 2009/09/04-18:38

記事番号483106へのコメント
しんさんは No.483106「Re:「WM_MOUSEMOVE」について」で書きました。

メッセージキューのトップからメッセージをGetMessageにしろPeekMessageにしろ
取得する場合、過去のメッセージはすでに破棄されているわけで。破棄されたものを
取得できるはずはなく。
もしGetMessageがキュートップからメッセージを取り出すときにメッセージの種類を
判断して保存するようになっていれば可能かも知れないが、それはメッセージループに
おいてループごとに余計な処理が行われることになりパフォーマンスがおそらくは
大幅に悪化するだろう。
メッセージループのメカニズムはWindowsの根幹であり、Windows1.xの時代からある
わけで、そのころのリソースを考えればメッセージを判断するのも保存するのも
行われていないというのは容易に想像可能なわけで。それが多少リソースが余裕が
出てきたからといって、プログラムが実行されている間にループし続けている
メッセージループに余計な処理を付加するという設計は、まずなかろうと。

あと、分割統治の考えから、メッセージループは適切にメッセージを取得し適切な
ウィンドウプロシジャにメッセージをディスパッチするのに専念し、ウィンドウ
プロシジャがメッセージに従った処理を行うことに専念するというのが自然であろう。
メッセージループ側にメッセージを判断する機能を持たせるのは美しくない。

ってことで、あなたの想定する便利機能は存在しないであろう。

▲このページのトップに戻る
483134Re:「WM_MOUSEMOVE」についてしん 2009/09/05-08:43

記事番号483114へのコメント
jtaka さん
からあげも食べたい さん
ヒロ さん

皆さん本当に有難うございました。

前回、書きましたが、機能的には、現在出来ているのですが、Windowsの機能(関数)で
出来ないkと考え、ご質問しました。

jtaka、ヒロ さんの指摘にも有る様に、

想定する便利機能は存在しないであろう。

のようです。


目的の概略
・Rect関数で描画された図形を「WM_MOUSEMOVE」で連続的に移動させる。
・OffsetRect()を使用する。
・現在値と直近のX値、Y値との差分はどうして採るか。


以上です、今回も有難うございました。

▲このページのトップに戻る
483120Re:「WM_MOUSEMOVE」についてからあげも食べたい 2009/09/04-20:14

記事番号483087へのコメント
しんさんは No.483087「「WM_MOUSEMOVE」について」で書きました。

「その処理を何のために使用としていますか?」

マウスを追跡するように「何か」を表示するために、WM_MOUSEMOVEのハンドラで座標をとっていて、
前回描画した「何か」を消すために必要というのであれば、単に前回の座標を変数に突っ込んでおけばよいでしょう。
(単に1つ前のが必要なら、一つ前の座標を残せばいいだけですし)

メッセージループでGetMessageまたはPeekMessageのwRemoveMsgにPM_REMOVEを指定してメッセージを取り出した場合、キューから削除されるので残っていません。

GetMessageをする前で最後のメッセージの座標であればGetMessagePosで取れるかもしれませんが、それがWM_MOUSEMOVEだとは限らないでしょうし、1つ前ではなく最後のですしね。

A1.本ページは参考になりましたか? 又はアドバイスがありますか?
解決 参考になった 参考にならなかった アドバイスする

A2.何度目の訪問ですか?
初めて来た   数度目(2〜4) 5回以上来ている   管理人:

A3.何か一言どうぞ(アドレスは書くことができません)

A4.アドレスがあればどうぞ(1つまで)


↑↑↑↑よろしければ押してください↑↑↑↑

何か一言(本ページで参考になったならないを含めて残してあります)
◎:解決 ○:参考になった ×:参考にならなかった !:アドバイスあり

参考回数投稿日時何か一言