WM_LBUTTONDOWNメッセージメソッドが動かない


脳髄  2004-01-21 12:21:07  No: 6860

いつも拝見させていただいています。
早速質問させていただきます。
TWinControlを継承したコントロールを作成しているのですが、
DragModeをdmAutomaticにしたときに
WM_LBUTTONDOWNメッセージメソッドが動作しないのですが、
どなたか原因をご存知でしょうか。
また、回避方法などご存知の方がいらっしゃいましたら、
ご回答よろしくお願いします。
作成しているコントロールは単純にTWinControlから派生させ、
WM_LBUTTONDOWNメッセージメソッドを記述しただけのものです。


にしの  2004-01-21 18:13:28  No: 6861

例えば、TEditでも、dmAutomaticの時にOnMouseDownが発生しないので仕様だと思います。
回避方法は、dmManualで処理させればよろしいかと。


脳髄  2004-01-23 20:36:19  No: 6862

早速のご回答ありがとうございます。
重ねての質問になってしまいますが、dmManualにした場合、
Drag&Dropの実装はどのように行うのでしょうか。
dmManualでもMouseDownにBeginDragを記述すれば可能ですが、
ドラッグとクリックを区別する必要があるので、悩んでいます。
良い解決方法があれば、ご回答よろしくお願いします。


にしの  2004-01-23 21:36:55  No: 6863

BeginDragだと、Immediate引数をfalseにしていてもすぐにReleaseCaptureされています。
これが問題になっているのだと思います。

ドラッグとクリックをどう切り分けるかに依りますが、例えばBeginDragと同じように、ドラッグ開始時のクリックが発生してもよいのであれば、

1.MouseDownでマウスカーソル位置を保存
2.MouseMoveでマウスの移動量が一定値以上であればBeginDrag。
これでよいかと思います。
# 2の時点(BeginDragの直後)で、クリックも呼ばれます。

BeginDrag後のクリックをキャンセルするやりかたの場合は、DoClickで、BeginDrag時のクリックか、通常のクリックかを判別させれば良いかと思います。


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

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






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