我正在尝试在包含几个小部件的figure
中很好地处理事件。一方面,只有figure
有WindowScrollWheelFcn
(如果我现在专注于鼠标滚轮)。另一方面,当我创建一个包含两个列表的图形时,比如
h_fig = figure();
strs = arrayfun(@num2str, [1:100], 'UniformOutput', false);
uicontrol(h_fig, 'Style', 'list', 'Units', 'normalized', 'Position', [0.6 0 1 1], 'String', strs);
uicontrol(h_fig, 'Style', 'list', 'Units', 'normalized', 'Position', [0 0 0.4 1], 'String', strs);
鼠标滚轮事件仅由所选列表捕获和处理。此外,如预期的那样,选择一个列表将取消选择另一个列表。
现在我想在那里插入我自己的小部件,我希望我的自定义小部件能够完全按照这些列表处理。如何编写一个与上面例子中显而易见的小部件选择机制集成的小部件?也就是说,这可能会禁用其他小部件(自定义和内置的类似列表)以及被禁用。我想,一旦实现了这一点,编写一个仅对所选小部件进行操作的WindowScrollWheelFcn
将非常简单。
我确信list
风格的uicontrol
的滚动发生在MATLAB的事件处理框架之外的Java级别。
但是,您可以使用gco
从回调中检测当前选定的对象。如果选择了其中一个,这将正确返回正在滚动的uicontrol
,并对axes
执行相同的操作。您只需要小心如何处理子对象的选择,例如,如果已选择绘制在axes
上的line
,但仍希望滚轮事件影响这些axes
。