2010-06-08 4 views
1

Je développe une application MDI avec l'aide de wxErlang. J'ai un cadre parent, mis en œuvre comme wx_object:wx_ref et personnalisé wx_object

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

-behaviour(wx_object). 

.... 

Et j'ai un cadre enfant, mis en œuvre comme wx_object aussi:

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). 

.... 

Je veux appeler save/1 pour un cadre enfant actif de la cadre parent. Il est mon code:

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

Ce code échoue parce que ActiveChild est #wx_ref {} avec state = [], mais wx_object: appeler/2 besoins #wx_ref {} où l'état est réglé sur le pid du processus qui nous appelons. Quelle est la bonne méthode pour le faire? Je pensais que pour stocker une liste de tous les cadres enfants créés avec ses pids dans le cadre parent et rechercher le pid dans cette liste, mais c'est moche.

Répondre

0

Vous ne pouvez pas (actuellement) obtenir l'objet Erlang/processus de
wxMDIParentFrame:getActiveChild(Frame),

Vous devrez garder les objets enfants erlang dans votre état et l'enfant actif, et probablement garder à jour avec événements.

Il y a place à l'amélioration ici

Questions connexes