我正在尝试在 WIN-PROLOG 中构建一个工具栏,但在为按钮提供功能时遇到了一些问题。
我想拥有与菜单栏中的项目具有相同功能的按钮。例如,一个名为“新建”的按钮与文件菜单中的“新建文件”项具有相同的功能。
我认为编写“system_menu(0,file,new)”就足够了,因为它适用于“新建”和“打开”功能,但不适用于保存或另存为等其他项目。如何使它适用于文件菜单和其他菜单(编辑、搜索、运行、选项、窗口、帮助)中的其他项目。
go:-
dynamic(known_focus/1),
gfx_brush_create(toolbar,128,128,128,solid),
toolbar,
window_handler(0,tlb_handler),
sndmsg(0,wm_size,0,0,_).
toolbar:-
_S2 = [ws_child,ws_visible,bs_pushbutton,ws_clipsiblings],
_S3 = [ws_child,ws_clipsiblings,ws_clipchildren,ws_visible],
wccreate((0,2),grafix, '', 0, 0, 32, 32, _S3),
wccreate((0,2,1000), button, 'New', 2, 2, 64 ,30, _S2),
wccreate((0,2,1001), button, 'Open', 67, 2, 64 ,30, _S2),
wccreate((0,2,1002), button, 'Save', 135, 2, 64 ,30, _S2),
wccreate((0,2,1003), button, 'Save as', 200, 2, 64 ,30, _S2),
wccreate((0,2,1004), button, 'Save all', 265, 2, 64 ,30, _S2).
tlb_handler(Win,msg_paint,_,_):-
Win = (0,2).
warea(Win,_,_,W,H),
W1 is W + 2,
H1 is H + 2,
gfx_paint(Win),
gfx((brush=toolbar -> rectangle(-1,-1,W1,H1)) ),
gfx_end(Win).
tlb_handler(Win,msg_button,_,_) :-
Win = (0,2,I),
tlb_button(I).
tlb_handler(Win,Msg,Dat,Res) :-
window_handler(Win,Msg,Dat,Res).
tlb_handler( (0,2,_) , msg_focus,Data,_) :-
wclass(Data,Class),
Class= 'Rich',
rectractall(known_focus(_)),
assert(known_focus(Data)).
tlb_button(1000) :-
system_menu(0,file,new).
tlb_button(1001):-
system_menu(0,file,open).
tlb_button(1002):-
system_menu(0,file,save).
tlb_button(1003):-
system_menu(0,file,save_as). ```