matlab:KeyPressFcn和WindowKeyPressFcn之间的差异
的Matlab文档定义是“当图形窗口具有焦点时,按键调用的回调函数。” 类似地,的定义是“当图形窗口或其任何子窗口具有焦点时,按键调用的回调函数。” 据我所知,图形的子对象是轴、打印对象和注释对象等实体。如果其中一个子图形具有焦点,则其父图形可能也具有焦点(至少其句柄将由matlab:KeyPressFcn和WindowKeyPressFcn之间的差异,matlab,matlab-figure,Matlab,Matlab Figure,的Matlab文档定义是“当图形窗口具有焦点时,按键调用的回调函数。” 类似地,的定义是“当图形窗口或其任何子窗口具有焦点时,按键调用的回调函数。” 据我所知,图形的子对象是轴、打印对象和注释对象等实体。如果其中一个子图形具有焦点,则其父图形可能也具有焦点(至少其句柄将由gcf返回)。因此,我看不出KeyPressFcn和WindowKeyPressFcn之间有任何实际区别,除了前者,由于其名称没有术语Window,在没有图形处于活动状态时,例如在命令窗口中操作时,也可能生效(尽管这一推测与回调
gcf
返回)。因此,我看不出KeyPressFcn
和WindowKeyPressFcn
之间有任何实际区别,除了前者,由于其名称没有术语Window
,在没有图形处于活动状态时,例如在命令窗口中操作时,也可能生效(尽管这一推测与回调定义不一致,回调定义明确地调用了图形窗口的存在)
有人能解释一下这两个回调函数之间的区别,以及什么时候最好使用一个回调函数而不是另一个吗?正如您在问题中所建议的,区别在于焦点
仅当图形具有焦点(但不包括其子对象)时才进行计算KeyPressFcn
- 另一方面,每当图形或其任何子图形有焦点时,都会对其进行计算
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
,并在编辑框有焦点时按一个键-将计算两个回调(首先是图形回调,然后是编辑框回调)