Обратный вызов MATLAB ResizeFcn завершается неудачно - PullRequest
4 голосов
/ 15 ноября 2011

Я редактирую 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

Вы можете видеть, что эта функция вызывает себя с флагом, который останавливается, если становится бесконечным циклом.И теперь я не могу изменить размер окна ниже минимального.Есть ли у кого-нибудь понимание этого поведения?

1 Ответ

1 голос
/ 16 ноября 2011

Пользователь на mathworks.com ответил на этот вопрос. Его решение решило проблему. Я поставлю ссылку ниже. http://www.mathworks.com/matlabcentral/answers/21294-matlab-resizefcn-callback-fails

...