ビヘイビアを使ってみた。
まだまだよくわからない。
サンプルにもなるのかはわからない。
動作画面:
ソースサンプル:
-module(wx_objectTest).
-export([start/0]).
-export([new/2, show/1]). %% API
-export([init/1, handle_call/3, handle_event/2]).
-export([terminate/2,handle_info/2,code_change/3]).
-include("wx.hrl").
-behaviour(wx_object).
start() ->
Wx = wx:new(),
new(Wx,?wxID_ANY).
%% Client API
new(Parent, Id) ->
io:format("new~n"),
%% @spec start(Mod, Args, Options) -> wxWindow().
%% Starts a generic wx_object server
%% and invokes Mod:init(Args) in the new process.
wx_object:start(?MODULE, [Parent,Id], []).
show(Dialog) ->
io:format("show~n"),
wxWindow:show(Dialog).
%% Server Implementation ala gen_server
init([Parent, Id]) ->
io:format("init~n"),
Dialog = wxDialog:new(Parent, Id, "Testing", []),
wxDialog:connect(Dialog,close_window),
show(Dialog),
MyState = "init",
{Dialog, MyState}.
handle_call(show, _From, State) ->
io:format("handle_call~n"),
{reply, ok, State}.
handle_event(#wx{event=#wxClose{}}, State) ->
io:format("handle_event~n"),
io:format("~p Closing window ~n",[self()]),
wx:destroy(),
{noreply, State}.
code_change(OldVsn, State, Extra) ->
io:format("Upgrading from ~p with extra data ~p~n", [OldVsn, Extra]),
{ ok, State }.
terminate(Reason,State) ->
io:format("Terminating ~p for reason ~p state:~p~n", [ self(), Reason,State ]),
ok.
handle_info(Msg, State) ->
io:format("Unexpected Info ~p~n", [Msg]),
{ noreply, State }.
赤字が最低限定義しなければならないものかな。
wx.hrlはErlangインストールディレクトリ配下を検索して探してください。
wx_objectTest:start().を実行すると画面が表示される。
start
→new
→init
→show
の順で動作し、
画面を閉じると
handle_eventが動作する。