KeyPressFcn
的Matlab文档定义是“在图形窗口具有焦点时按键调用的回调函数。”
类似地,WindowKeyPressFcn
的定义是“按下按键时调用的回调函数,当图形窗口或其任何子窗口具有焦点时发生。”
据我所知,数字的子项是轴,绘图对象和注释对象等实体。如果这些孩子中的一个具有焦点,那么其父图可能也具有焦点(至少其句柄将由gcf
返回)。因此,我认为KeyPressFcn
和WindowKeyPressFcn
之间没有任何实际区别,除了前者,由于其名称缺少术语Window
,也可能在没有数字时生效活动,例如在命令窗口中操作时(虽然这个猜想与回调定义不一致,后者显式调用了数字窗口的存在)。
是否有人请求解释这两个回调函数之间的区别,以及何时使用其中一个回调函数可能更受欢迎?
答案 0 :(得分:7)
正如您在问题中所建议的那样,差异在于焦点。
KeyPressFcn
仅在图形具有焦点(但不是其子像素)时进行评估。 WindowKeyPressFcn
进行评估。 这可以用以下代码说明:
function test_keypress_vs_windowkeypress
h.hf = figure();
h.edit = uicontrol('Style', 'edit', 'Units', 'Normalized',...
'Position', [0.2, 0.2, 0.6, 0.6]);
% set callbacks
set(h.hf, 'KeyPressFcn', @wintest);
set(h.edit, 'KeyPressFcn', @edittest);
function wintest(h, e)
disp('window button press');
function edittest(h, e)
disp('editbox button press');
该函数创建一个带有KeyPressFcn
的图形(带有一个丑陋的编辑框)(也有一个KeyPressFcn
)。
现在,如果你:
edittest
回调。wintest
回调。WindowKeyPressFcn
并在编辑框具有焦点时按键 - 两个回调将被评估(首先是数字回调,然后是编辑框回调)。 / LI>