nmi*_*els 3 erlang wxwidgets wxerlang
我一直在探索Erlang的wx
模块和本教程.我之前没有使用过wxwidgets,所以也许这就是它的完成方式,但这段代码对我来说真的很糟糕:
%% create widgets
T1001 = wxTextCtrl:new(Panel, 1001,[]),
ST2001 = wxStaticText:new(Panel, 2001,"Output Area", []),
B101 = wxButton:new(Panel, 101, [{label, "&Countdown"}]),
B102 = wxButton:new(Panel, ?wxID_EXIT, [{label, "E&xit"}]),
wxFrame:show(Frame),
Run Code Online (Sandbox Code Playgroud)
人们是否真的必须在创建小部件时为其分配小部件ID?在窗口小部件ID之后命名指向窗口小部件的变量是否正常?
我不知道Erlang,但是在C++中(以及我所知道的其他绑定),通常最好使用wxID_ANY
widget ID,这意味着你不关心它的特定值,然后Connect()
用来处理来自的小部件.如果您需要稍后通过其ID找到窗口小部件(尽管您也可以使用窗口小部件名称),或者如果您需要连续的ID范围(例如,使用ID 100,101,...,那么显式ID)可能很方便. ..,109用于计算器的按钮,因为您可以轻松地从其ID中推导出每个按钮值,但不需要总是使用它们.
至于命名,当然,没有必要使用这个奇怪的约定(快速查看教程表明它是作者的个人偏好 - 不用说,我不分享).
与上面提到的VZ一样,如果您不需要稍后通过其id查找窗口小部件,则可以使用wxID_ANY.
但是,我认为不仅在ids之后命名变量是不正常的,而且这样做是一个非常糟糕的主意.根据变量的含义命名变量,而不是使用一些模糊的id.
此外,您最好定义所需的ID并为其指定正确的(语义)名称,以便它们只在一个地方定义,以后您可以轻松更改ID而不会影响您的程序,如下所示:
-define(ID_TEXT_CTRL, 1001).
-define(ID_OUTPUT_AREA, 2001).
-define(ID_COUNTDOWN_BUTTON, 101).
-define(ID_EXIT_BUTTON, ?wxID_EXIT).
TextCtrl = wxTextCtrl:new(Panel, ?ID_TEXT_CTRL,[]),
OutputArea = wxStaticText:new(Panel, ?ID_OUTPUT_AREA,"Output Area", []),
CountdownButton = wxButton:new(Panel, ?ID_COUNTDOWN_BUTTON, [{label, "&Countdown"}]),
ExitButton = wxButton:new(Panel, ?ID_EXIT_BUTTON, [{label, "E&xit"}])
Run Code Online (Sandbox Code Playgroud)
您可以将定义放在.erl
文件中(如果只有一个),或者放在.hrl
文件中,您必须将这些定义包含在所有与GUI相关的.erl
文件中.