1

関連する回答で述べたように、次を使用して、開いているすべての図のハンドルを取得できます。

hFigs = findall(groot, 'Type', 'figure');

figureしかし、これは「古い」ハンドルと「新しい」ハンドルの両方を含むリストになりuifigureます。

1 つは参照のみを含み、もう1 つは参照のみhFigsを含む 2 つのリストに分けるにはどうすればよいですか? figure uifigure

4

1 に答える 1

2

figureuifigureオブジェクトをプログラム的に区別するために、ここで提案したことをわずかに適応させることができます。

function tf = isUIFigure(hFigList)
  tf = arrayfun(@(x)isstruct(struct(x).ControllerInfo), hFigList);
end

上記を呼び出す前に、いくつかの警告をオフにすることをお勧めします。

% Turn off warnings:
ws(2) = warning('query','MATLAB:structOnObject');
ws(1) = warning('query','MATLAB:HandleGraphics:ObsoletedProperty:JavaFrame');
for indW = 1:numel(ws)
  warning('off', ws(indW).identifier);
end
% Call function:
tf = isUIFigure(hFigs);
% Restore the warnings' state:
warning(ws);

そして結論として:

hFigs = findall(groot, 'Type', 'figure');
isUIF = isUIFigure(hFigs);
hNewFigs = hFigs(isUIF);
hOldFigs = hFigs(~isUIF);

このソリューションは、R2017a および R2017b でテストされました。

于 2017-11-22T09:39:53.787 に答える