1

wxFormBuilderを使用してwxwidgetsフォームを作成しました。オブジェクトでマウスホイール イベントをスローしようとしています。イベントがスローされないのが問題なので、何か追加設定があればお願いしたいです。オブジェクトには、このようなイベント テーブルがあります

BEGIN_EVENT_TABLE(MyObj, wxScrolledWindow)
  EVT_MOUSEWHEEL(MyObj::OnMouseWheel)
END_EVENT_TABLE();

そして、次のように初期化されます。

myObjInstance = new MyObj(this, ID_MYOBJ, wxPoint(10, 10), wxSize(30,30), 0);

wxFormBuilder で、GUI からイベントを追加すると、この出力を生成する関数 Connectが使用されていることに気付きました

myObjInstance ->Connect( wxEVT_MOTION, wxMouseEventHandler( MyFrame::TestMouseOnverTheEdit ), NULL, this );

しかし、イベント ハンドラー関数 OnMouseWheel がクラス MyObj にあり、保護されているため、使用できません。

また、 wxDev-C++でこのオブジェクトとイベントを使用してフレームを作成したところ、イベントがスローされました。違いは、wxFormBuilder で作成されたフォームには複数のサイザーとパネルがあるのに対し、wxDev-C++ のフォームには何もないことです。同様の問題が解決されましたが、どうすればよいかまだわかりません。ありがとう。

編集:ハンドラーの署名:

void OnMouseWheel(wxMouseEvent & AwxEvent);
4

3 に答える 3

1

「問題は、イベントがスローされないことです」

イベントが実際にスローされると思います。あなたの問題は、それが捕まらないことです!

ここにあなたが調べる必要があるいくつかの事柄があります.

  1. イベント ハンドラーは公開する必要があります。

  2. MyObj とは何ですか? これは、wxFrame またはその他の標準的な wxWidgets ウィンドウの特殊化である必要があります。

    BEGIN_EVENT_TABLE(MyObj, wxScrolledWindow)

    これは、MyObj が wxScrolledWindow の特殊化であることを意味します。そうでない場合は、コメントで提案しているように、イベント テーブルはイベントをキャッチするために機能しません。 http://wiki.wxwidgets.org/Events#Inheriting_Event_Tables_.28Events_in_Derived_Classes.29

  3. イベント テーブルを使用しているか、Connect() メソッドを使用しているかは明確ではありません。両方は使えません!

  4. 接続を使用する場合は、正しいオブジェクトを使用して呼び出すように注意する必要があります。簡単に言うと、イベントを処理しているオブジェクトではなく、イベントを生成したフレームの connect メソッドを呼び出す必要があります。 http://wiki.wxwidgets.org/Events#Using_Connect.28.29

于 2012-10-04T16:03:38.440 に答える
1

私は解決策を見つけました。問題は、wxPanel (メイン フレーム内) を持っていたことです。

m_panel = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );

そして、次のように myObj をアプリに追加していました。

myObjInstance = new MyObj(this, ID_MYOBJ, wxPoint(10, 10), wxSize(30,30), 0);

これはうまくいかなかったので、最初の引数 (親ウィンドウ) を m_panel に設定しました。

myObjInstance = new MyObj(m_panel , ID_MYOBJ, wxPoint(10, 10), wxSize(30,30), 0); 

これで、イベント テーブルで問題なく動作します。

于 2012-10-08T12:44:59.570 に答える
0

を使用する場合は、 ではなくConnect()を指定する必要があります。wxEVT_MOUSEWHEELwxEVT_MOTION

于 2012-10-05T12:42:13.303 に答える