wx_ref и пользовательские wx_object's
Я разрабатываю приложение 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 в этом списке, но это уродливо.
1 ответ
Вы не можете (в настоящее время) получить объект / процесс erlang отwxMDIParentFrame:getActiveChild(Frame)
,
Вам нужно будет поддерживать дочерние объекты erlang в вашем состоянии и активного дочернего элемента, а также, вероятно, обновлять его событиями.
Здесь есть место для улучшения