1

wxErlang を使用して MDI アプリケーションを開発しています。wx_object として実装された親フレームがあります。

-module(main_frame).
-export([new/0, init/1, handle_call/3, handle_event/2, terminate/2]).

-behaviour(wx_object).

....

また、wx_object として実装された子フレームもあります。

module(child_frame).
-export([new/2, init/1, handle_call/3, handle_event/2, terminate/2]).
-export([save/1]).

-behaviour(wx_object).

% some public API method
save(Frame) ->
    wx_object:call(Frame, save).

....

親フレームからアクティブな子フレームに対して save/1 を呼び出したい。私のコードがあります:

 ActiveChild = wxMDIParentFrame:getActiveChild(Frame),
 case wx:is_null(ActiveChild) of
  false ->
   child_frame:save(ActiveChild);
  _ ->
   ignore
 end

ActiveChild が state=[] の #wx_ref{} であるため、このコードは失敗しますが、wx_object:call/2 には #wx_ref{} が必要です。ここで、state は呼び出すプロセスの pid に設定されます。これを行う正しい方法は何ですか?作成されたすべての子フレームのリストとその pid を親フレームに保存し、このリストで pid を検索することだけを考えましたが、これは醜いです。

4

1 に答える 1

0

(現在) から erlang オブジェクト/プロセスを取得することはできません
wxMDIParentFrame:getActiveChild(Frame)

erlang Child オブジェクトを状態とアクティブな子に保持する必要があり、おそらくイベントで更新し続ける必要があります。

ここは改善の余地あり

于 2011-12-21T10:39:44.197 に答える