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 を検索することだけを考えましたが、これは醜いです。