2013-12-18 2 views
0

GUIDE를 사용하여 matlab에서 GUI를 생성하고 있습니다. 마우스 왼쪽 버튼을 눌렀을 때 핸들에 새로운 필드를 만들고 마우스가 움직일 때 필드를 수정하고 버튼을 놓을 때 필드를 삭제하고 싶습니다. 그러나 Windowbuttonmotionfcn 콜백은 새 필드를 보지 못합니다. 만 통과하고 있기 때문에,Windowbuttonmotionfcn 콜백이 핸들에서 새로운 필드를 보지 못합니다.

set(hObject,'windowbuttonmotionfcn',{@fh_wbmfcn,handles}); 

handles의 값은 항상 당신이 그 시점에서 설정 한 것 :

function fig_OpeningFcn(hObject, eventdata, handles, varargin) 

    handles.output = hObject; 
    guidata(hObject, handles); 

    set(hObject,'windowbuttonmotionfcn',{@fh_wbmfcn,handles}); 
    set(hObject, 'windowbuttondownfcn',{@fh_wbdfcn, handles}); 
    set(hObject, 'windowbuttonupfcn',{@fh_wbufcn, handles}); 

function fh_wbmfcn(hObject, eventdata, handles) 
    isfield(handles, 'new_field') % it is always 0, but should be 1 when button is down 

function fh_wbdfcn(hObject, eventdata, handles) 
    handles.new_field=1; 
    guidata(hObject, handles); 

function fh_wbufcn(hObject, eventdata, handles) 
    if isfield(handles, 'new_field') 
    handles=rmfield(handles,'new_field'); 
    guidata(hObject, handles); 
    end 

답변

0

이 같은 콜백을 지정 : 그래서, 여기에 코드 예제입니다 handles 변수의 값 이 콜백의 실행 시간에 항상 guidata(gcbo)을 평가합니다

set(hObject,'windowbuttonmotionfcn', @(obj,evt) fh_wbmfc(obj,evt, guidata(gcbo)); 

- 따라서 당신에게 현재 handles 값을 제공 :

또한, 다음과 같은 작업을해야합니다.

대체 번호. 2 (내 개인 취향) :

% remove handles from callback definition 
set(hObject,'windowbuttonmotionfcn', @fh_wbmfc); 

% and get current handle value in the callback function: 
def fh_wbmfc(object, evt) 
    handles = guidata(object); 
    ... 
관련 문제