改良したところは、loop内のメッセージを受信するところ。
前はloopの引数にwxTextCtrlのポインタを設定して、receive内でそのポインタを使っていた。
しかし、それはメッセージパッシングではなかったので、自分としては納得していなかった。
ようやくメッセージパッシングでできることを知ったので、改良した。
前後の比較はコメントアウトとそうでないもので表現した。
たぶん、もう一個くらいloopの引数を減らすことができるのではないかと思っている。
ソース:
-module(irc2).
-export([start/0]).
-include_lib("wx.hrl").
-define(wxID_txtEdit,1000).
-define(wxID_txtUnEdit,1001).
start() ->
% Create Window Object
Wx = wx:new(),
% Create Window
%{Dialog,TxtEdit,TxtUnEdit} = wx:batch(fun() -> create_window(Wx) end),
{Dialog,TxtUnEdit} = wx:batch(fun() -> create_window(Wx) end),
% Show Window
wxWindow:show(Dialog),
% Message Receive Loop
%loop(Dialog,TxtEdit,TxtUnEdit),
loop(Dialog,TxtUnEdit),
% Destroy Window
wx:destroy(),
ok.
create_window(Wx)->
% Create Dialog
Dialog = wxDialog:new(Wx,
-1,
"Dialog IRC",
[{size,{300,200}}]),
% Set Option
OptnTE = [{pos,{1,150}},{size,{290,20}},{style,?wxTE_PROCESS_ENTER}],
TxtEdit = wxTextCtrl:new(Dialog,
?wxID_txtEdit,
OptnTE),
% Set Option and set multiline({style,?wxTE_MULTILINE})
OptnTUE = [{pos,{1,0}},{size,{290,150}},{style,?wxTE_MULTILINE}],
TxtUnEdit = wxTextCtrl:new(Dialog,
?wxID_txtUnEdit,
OptnTUE),
% set unable edit
wxTextCtrl:setEditable(TxtUnEdit,false),
% connect
wxDialog:connect(Dialog, close_window),
wxTextCtrl:connect(TxtEdit,command_text_enter),
% Return
%{Dialog,TxtEdit,TxtUnEdit}
{Dialog,TxtUnEdit}.
%loop(Dialog,TxtUnEdit) ->
loop(Dialog,TxtUnEdit) ->
receive
% Window Close Event
#wx{event=#wxClose{}} ->
io:format("~p Closing window ~n",[self()]),
wxWindow:destroy(Dialog),
ok;
% Pressed Enter Event
%#wx{event=#wxCommand{type = command_text_enter}} ->
#wx{obj = TxtEdit ,event=#wxCommand{type = command_text_enter}} ->
Msg = wxTextCtrl:getValue(TxtEdit),
io:format("String: ~p~n",[Msg]),
wxTextCtrl:appendText(TxtUnEdit,Msg),
%loop(Dialog,TxtEdit,TxtUnEdit)
loop(Dialog,TxtUnEdit)
end.
0 件のコメント:
コメントを投稿