Main Content

防止对图窗和坐标区访问

为什么防止访问

某些情况下,防止特定图窗或坐标区成为图形输出的目标非常重要。也就是防止其成为 gcf 返回的当前图窗,或 gca 返回的当前坐标区。

您可能想要防止访问包含实现用户界面的控件的图窗。或者您想要防止访问作为应用程序一部分且只能被应用程序访问的坐标区。

如何防止访问

通过将特定图窗或坐标区从 MATLAB® 函数的可见句柄列表中移除,以防止该函数访问这些图窗或坐标区。

有两个属性用于设置控制柄的可见性:HandleVisibilityShowHiddenHandles

HandleVisibility 是所有图形对象的属性。它控制对象句柄的可见性,有三个可能值:

  • 'on' - 您可以通过返回句柄的函数获得对象句柄,如(gcfgcagcogetfindobj)。这是默认行为。

  • 'callback' - 对象的句柄仅在回调函数的工作区中可见。

  • 'off' - 句柄对所有在命令行窗口和回调函数中执行的函数都隐藏。

受句柄可见性影响的属性

当对象的 HandleVisibility 设置为 'callback''off' 时:

  • 对象句柄不会出现在其父对象的 Children 属性中。

  • 图窗不会出现在根对象的 CurrentFigure 属性中。

  • 坐标区不会出现在包含图窗的 CurrentAxes 属性中。

  • 图形对象不会出现在图窗的 CurrentObject 属性中。

受句柄可见性影响的函数

当句柄在其父对象的子对象列表中不可见时,通过搜索对象层次结构获取句柄的函数无法返回该句柄。这些函数包括 getfindobjgcagcfgconewplotclaclfclose

gca 和 gcf 返回值

如果隐藏句柄的图窗位于屏幕最顶层,而可见句柄的图窗叠放在其后,那么 gcf 会在堆栈中返回最顶层图窗。同样的行为也适用于 gca。如果不存在可见句柄的图窗,那么调用 gcfgca 创建一个。

访问隐藏句柄对象

ShowHiddenHandles 属性启用或禁用句柄可见性控制。默认情况下,ShowHiddenHandles'off',这意味着 MATLAB 遵循每个对象 HandleVisibility 属性设置。

ShowHiddenHandles 设置为 on 等效于将图形层次结构中所有对象的 HandleVisibility 属性设置为 on

注意

坐标区标题和坐标区标签文本对象不是坐标区的子对象。要访问这些对象的句柄,使用坐标区 TitleXLabelYLabelZLabel 属性。

close 函数还允许使用 hidden 选项访问隐藏句柄的图窗。例如:

close('hidden') 

关闭屏幕上最顶层图窗,即使其句柄是隐藏的。

合并 allhidden 选项:

close('all','hidden')

关闭所有图窗。

句柄有效性与句柄可见性

无论句柄的 HandleVisibility 属性的状态如何,所有句柄都保持有效。如果您已将一个对象句柄分配给一个变量,那么您可以使用该句柄变量设置或获取其属性。