1

我正在尝试在 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). ```
4

0 回答 0