1

ソケットがオフラインになるなど、下位レベルでイベントが発生した場合に GUI 要素を更新する必要がある小さなアプリケーションがあります。

Windows では、チェーンを介してすべての Windows に送信される PostMessage を使用でき、それに応じて必要なものを更新できます。

wxWidgets で同様のことを実現するにはどうすればよいですか? 一部のコントロールはそれをまったく処理していないように見えるため、OnUpdateUI などを使用することはできません。

ターゲット ウィンドウは 1 つまたは複数の可能性があり、フレームまたはコントロールである可能性があるため、ここで少し混乱します。

誰か提案がありますか?

4

2 に答える 2

4

まず、すべてのコントロールが受信EVT_UPDATE_UIするため、これを使用できます。これは非常に簡単に実行できますが、最も効率が悪いため、ソケットイベント処理などには絶対にお勧めできません (ソケットが接続されているかどうかを確認するのには問題ありません)。ではありません)。

第二に、Windows とまったく同じもの::PostMessage()は(以前は実際wxQueueEvent()に呼ばれていましたが、新しいバージョンの方が望ましいです)。セカンダリ スレッドから、メイン スレッドによって管理される GUI コントロールにイベントをポストするために使用できるという意味で、スレッド セーフです。wxPostEvent()wxQueueEvent()

于 2012-10-15T11:30:47.803 に答える
1

Win32 アプリと同じアプローチを使用できます。カスタム イベント クラスを作成し、wxPostEvent 関数を使用してウィンドウに送信できます。これに関するいくつかのドキュメントがあります。

wxUpdateUIEvent の意味がわからない - 私の経験からすると、かなりうまく動作します。どのコントロールがそれを受け取らないのですか? EVT_UPDATE_UI() マクロをイベント テーブルに追加しましたか?

于 2012-10-15T11:12:10.497 に答える