2016-08-09 2 views
1

post은 overobj 함수를 사용하여 gui의 축 부분을 변경할 포인터를 설정하는 방법을 보여줍니다. 문제는 줌 또는 팬 툴바 버튼으로 설정된 포인터 모양보다 우선합니다. 나는 다양한 도구 모음 단추는 다음과 같이에있는 테스트 할 수 있습니다 :Overobj와 툴바 버튼을 Matlab에서 포인터를 설정하기위한 조정

if (strcmp(handles.zoom.State, 'off')) 
    obj_han=overobj('axes'); 
    if ~isempty(obj_han) 
     set(handles.figure1,'Pointer','cross'); 
    else 
     set(handles.figure1,'Pointer','arrow'); 
    end 
    end 

하지만 그 오류에 대한 공식처럼 보인다 도구 모음에있는 모든 툴 버튼에 대한 새로운 테스트를 추가해야합니다. 예를 들어 확대/축소는 어떻게 포인터를 설정합니까? 툴바 버튼이 변경되는 방식으로 포인터를 변경하는 것을 통합하는 더 좋은 방법이 있습니까?

답변

2

문서화되지 않은 uimode and uimodemanager을 사용하여 현재 uimode을 얻을 수 있으며 현재 uimode이 비어 있으면 아무 도구도 활성화되지 않습니다.

manager = uigetmodemanager(gcf); 

% Only alter the pointer if the CurrentMode is empty 
if isempty(manager.CurrentMode) 
    if ~isempty(obj_han) 
     set(handles.figure1, 'Pointer', 'cross') 
    else 
     set(handles.figure1, 'Pointer', 'arrow') 
    end 
end 

나는 당신의 콜백의 uimodemanager외부를 검색 할 것입니다 당신이 그것을 매번 검색하지 않아도 콜백에 명시 적으로 전달합니다.

+0

이 작동하지만 추가 질문이 표시됩니다. 내 gui 축 obj 그 다음 imshow ('pic.bmp') 위에 있습니다. 기본 동작은 축 obj의 가시성을 끄고 축을 오버 로봇으로부터 숨기는 것입니다. 좋아, 다시 켜고,하지만 지금은 내 이미지 바깥 쪽 눈금이 생겼어. 나는 Axes.XTick = [] (그리고 Y와 동일)로 그들을 끌 수있다. 그러나 이것을하는 더 우아한 방법이 있는가? 또한 코드 첫 줄에 gcf 대신 gcbf를 사용해야합니까? – Llaves

+0

@Llaves 축을 사용하여이를 수행하는 유일한 방법은 수행 한 작업입니다. 원하는 경우'gcbf'를 사용할 수 있습니다. 스 니펫은 그림에서 'uimodemanager'를 검색한다는 것을 보여줍니다. 그 그림 핸들을 얻는 방법은 당신에게 달려 있습니다. – Suever

관련 문제