0

いくつかの 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_pWxbuttonwxButtonイベントが登録されています)。うまくいきませんでした: マウス イベント ハンドラーが呼び出されますが、wxEVT_COMMAND_BUTTON_CLICKEDイベントを取得することも、ボタンが GUI で「押された」視覚状態になることもありません。渡されたイベントのイベント タイプを変更してから を呼び出したバージョンも試しましたがSkip()、結果は同じでした。

確かに、ボタンの場合は自分でクリックを検出するのは簡単ですが、これをスライダーでも機能させることを望んでおり、それらのマウスロジックをすべて再実装するという考えは好きではありません. :)

マウス イベントを変換してネイティブ GUI イベントのように動作させるにはどうすればよいですか? または、私が試すべきまったく異なるアプローチはありますか?

4

1 に答える 1

0

このように標準コントロールの動作を変更することはできません。これが標準コントロールである理由です。もちろん、任意の方法でマウスを処理するカスタムのボタンのようなコントロールを使用できますが、標準のコントロールを変更して目的の操作を実行する移植可能な方法はありません。せいぜいプラットフォーム固有のコードを使用でき、一部のプラットフォームではこれは完全に不可能かもしれません。

于 2012-09-15T10:57:14.230 に答える