純粋な WinAPI プログラムにタッチ スクロールのような動作を実装したいと考えています。私はすでに数日を過ごしました。
これまでにいくつかの方法を試しました。最も成功したのは、EnableWindow(hwnd, false) でウィンドウ全体を無効にし、すべてのマウス イベントをキャプチャして子にディスパッチすることでした。GetCursorPos/GetTopWindow/GetNextWindow を使用して、すべての子を見つけることができました。しかし今では、ボタンやその他の単純なものに対してのみ機能します。EDIT コントロールは無効な状態であるため (ウィンドウ全体が無効になっているため)、応答しません。
WM_PARENTNOTIFY も試しました。しかし、このメッセージを受け取ったときに、子供がすぐに受け取るのを止めることはできないため、これは機能しません。そして、タッチスクロールにはそれが必要です。
これはイライラします。唯一のオプションは、マウス メッセージの低レベルの傍受を行うことだと思います。それらをキューに入れ、実際のスクロールが発生した場合に子に送信するか破棄する機能。しかし、それを正確に行う方法は?必要なのは、子ツリーに移動する前にメインウィンドウでマウスイベントを取得し、子ツリーに移動したくない場合は、何らかの条件でこのイベントを停止できるようにすることです。
それがなければ、キーボード修飾子を使用することしか考えられません。したがって、ユーザーが CONTROL (たとえば) を押すと、ウィンドウ全体が一時的に無効になり、すべてのマウス イベントがスクロールします。しかし、これは最後の手段です。マウス ボタンを押して 100 ミリ秒以内に動き始めると、スクロールします。100 ミリ秒以内に動きが検出されない場合は、イベントが通常どおりに進みます。
クロスプラットフォーム ライブラリにこれが必要です。Windows XP を含むすべてのプラットフォームで同じように動作するようにしたいのです。
ありがとうございました。