Я редактирую GUI, написанный на MATLAB, и у меня есть строка в OpeningFcn, которая устанавливает обратный вызов для изменения размера фигуры.
set(hObject, 'UserData', handles.ParentFig, 'ResizeFcn',@cbFigResize, 'CloseRequestFcn', @Cancel);
Обратный вызов вставлен ниже с большим количеством отредактированных для простоты.
function cbFigResize(src,evt)
% check if figure width is less than 600
if fpos(3) < 600
%set min. width to 600
fpos(3) = 600
end
%check if figure height is less than 560
if fpos(4) <560
% set minimum height to 560
fpos(4) = 560;
end
Мой коллега работает под управлением Windows XP и более ранней версии MATLAB.Я использую Windows 7 и MATLAB 7.12.0.635.Теперь, когда он изменяет размеры фигур, они всегда меняются правильно.Когда я запускаю один и тот же код, я иногда могу получить фигуру меньше, чем установленные выше минимальные пределы ширины и высоты.Мой коллега говорит, что это проблема прерывания Windows 7.Если у кого-то еще есть эта проблема, мы нашли простой, но нелогичный обходной путь, который я опубликую ниже.
function cbFigResize(src,evt,doStop)
if nargin < 3
doStop = false;
end
% check if figure width is less than 600
if fpos(3) < 600
%set min. width to 600
fpos(3) = 600
end
%check if figure height is less than 560
if fpos(4) <560
% set minimum height to 560
fpos(4) = 560;
end
if ~doStop
cbFigResize(src,evt,true)
end
Вы можете видеть, что эта функция вызывает себя с флагом, который останавливается, если становится бесконечным циклом.И теперь я не могу изменить размер окна ниже минимального.Есть ли у кого-нибудь понимание этого поведения?