正如您在问题中所建议的那样,区别在于焦点.
>仅当图形具有焦点(而不是其子像素)时才评估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回调.>当图形具有焦点时按任意键,仅评估最小的回调.>将窗口回调更改为WindowKeyPressFcn并在编辑框具有焦点时按一个键 – 将评估两个回调(首先是数字回调,然后是编辑框回调).