Matlab Handle Graphics (HG) is a great way to manipulate GUI objects. HG handles often have some undocumented hidden properties. One pretty well-known example is the JavaFrame property of the figure handle, which enables access to the GUI’s underlying Java peer object. We can use hidden properties just like any other handle property, using the built-in get and set functions.
But how can we know about these properties? Here are two methods to do so. Like the hidden properties, these two methods are themselves undocumented…
1. use the desktop’s hidden HideUndocumented property:
From now on, when displaying handle properties using get and set you’ll see the hidden properties.
Note that some of the properties might display a warning indication:
>> get(gcf) Alphamap = [ (1 by 64) double array] BackingStore = on CloseRequestFcn = closereq Color = [0.8 0.8 0.8] Colormap = [ (64 by 3) double array] CurrentAxes =  CurrentCharacter = CurrentKey = CurrentModifier = [ (1 by 0) cell array] CurrentObject =  CurrentPoint = [0 0] DithermapWarning: figure Dithermap is no longer useful with TrueColor displays, and will be removed in a future release. = [ (64 by 3) double array] ...
2. Access the properties’ definition in the handle’s class definition:
>> ch = classhandle(handle(gcf)); >> props = get(ch,'Properties'); >> propsVisibility = get(props,'Visible')'; >> hiddenProps = props(strcmp(propsVisibility,'off')); >> sort(get(hiddenProps,'Name')) ans = 'ALimInclude' 'ActivePositionProperty' 'ApplicationData' 'BackingStore' 'Behavior' 'CLimInclude' 'CurrentKey' 'CurrentModifier' 'Dithermap' 'DithermapMode' 'ExportTemplate' 'HelpFcn' 'HelpTopicKey' 'HelpTopicMap' 'IncludeRenderer' 'JavaFrame' 'OuterPosition' 'PixelBounds' 'PrintTemplate' 'Serializable' 'ShareColors' 'UseHG2' 'WaitStatus' 'XLimInclude' 'YLimInclude' 'ZLimInclude'
Different HG handles have different hidden properties. Not all these properties are useful. For example, I have found the PixelBounds property to be problematic – (it sometimes reports incorrect values!). Other properties (like Dithermap or ShareColors) are deprecated and display a warning wherever they are accessed.
But every so often we find a hidden property that can be of some actual benefit. Let’s take the figure handle’s OuterPosition property for example. It provides the figure’s external position values, including the space used by the window frame, toolbars etc., whereas the regular documented Position property only reports the internal bounds:
>> get(gcf,'pos') ans = 232 246 560 420 >> get(gcf,'outer') ans = 228 242 568 502
In future posts I will sometimes use such hidden properties. You can find the latest list by looking at this blog’s “Hidden property” category page.
Note: Like the rest of Matlab’s undocumented items, all hidden properties are undocumented, unsupported and may well change in future Matlab releases so use them with care.
Did you find any useful hidden property? If so, then please leave your finding in the comments section below.