いくつかの wxWidgets コントロールが中ボタンのマウス クリックに応答し、通常の左クリックとまったく同じように動作するようにしたいというシナリオがありますが、中クリックであることがわかり、実行できる必要があります。私のアプリケーションでは何か違う。
具体的には、ボタンとスライダーを操作しており、ボタンを押してスライダーを中央のボタンでドラッグできるようにしたいと考えています。私はWindowsを使用しています(そして、それが私が気にかけている唯一のプラットフォームです)、それが違いを生む場合に備えて。
wx ドキュメントを少し調べた後、コントロールがリッスンするマウス ボタンを設定する方法が見つかりませんでした。そこで、私の最初のアイデアは、中ボタン イベントをキャプチャし、それらを対応する左ボタン イベントに変換し、それらを処理するように wx に指示するイベント ハンドラーを作成することでした。
void OnMouseEvent(wxMouseEvent & wxevent)
{
wxMouseEvent wxeventTranslated = wxevent;
if (wxevent.MiddleDown())
{
wxeventTranslated.SetEventType(wxEVT_LEFT_DOWN);
}
else if (wxevent.MiddleUp())
{
wxeventTranslated.SetEventType(wxEVT_LEFT_UP);
}
else
{
return;
}
m_pWxbutton->ProcessWindowEvent(wxeventTranslated);
}
(ここm_pWxbutton
にwxButton
イベントが登録されています)。うまくいきませんでした: マウス イベント ハンドラーが呼び出されますが、wxEVT_COMMAND_BUTTON_CLICKED
イベントを取得することも、ボタンが GUI で「押された」視覚状態になることもありません。渡されたイベントのイベント タイプを変更してから を呼び出したバージョンも試しましたがSkip()
、結果は同じでした。
確かに、ボタンの場合は自分でクリックを検出するのは簡単ですが、これをスライダーでも機能させることを望んでおり、それらのマウスロジックをすべて再実装するという考えは好きではありません. :)
マウス イベントを変換してネイティブ GUI イベントのように動作させるにはどうすればよいですか? または、私が試すべきまったく異なるアプローチはありますか?