Я разрабатываю приложение MDI с помощью wxErlang. У меня есть родительский кадр, реализованный как 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 - это #wx_ref {} с состоянием = [], но для wx_object: call / 2 требуется #wx_ref {}, где состояние установлено в pid процесса, который мы вызываем. Какой правильный способ сделать это? Я думал только о том, чтобы сохранить список всех созданных дочерних фреймов с его pids в родительском фрейме и искать pid в этом списке, но это ужасно.