Main Content

마우스 클릭을 그룹의 부모 객체로 전달하기

이 예제에서는 객체 그룹이 마우스 클릭을 그룹 내 모든 객체에서 동작하는 부모 객체로 전달하는 방법을 보여줍니다.

목적 및 설계

객체 그룹 내 임의의 멤버에 대한 단일 마우스 클릭으로 그룹 내 모든 객체에 영향을 미치는 단일 버튼 누름 콜백을 실행시키는 경우를 가정하겠습니다.

  • 그룹에 추가할 그래픽스 객체를 정의합니다.

  • hggroup 객체를 그래픽스 객체의 부모로 할당합니다.

  • 아무 객체나 클릭되었을 때 실행할 함수를 정의합니다. 이 함수의 함수 핸들을 hggroup 객체의 ButtonDownFcn 속성에 할당합니다.

  • 마우스 클릭이 객체의 부모에 전달되도록 그룹의 모든 객체에 대한 HitTest 속성을 off로 설정합니다.

객체 계층 구조 및 주요 속성

이 예제에서는 다음과 같은 객체 계층 구조를 사용합니다.

MATLAB 코드

다음 두 함수를 사용하여 파일을 생성합니다.

  • pickPatch — 그래픽스 객체를 생성하는 메인 함수입니다.

  • groupCBhggroup 콜백에 대한 로컬 함수입니다.

pickPatch 함수는 세 개의 patch 객체를 생성하고 hggroup 객체를 부모로 지정합니다. 각 패치의 HitTest 속성을 off로 설정하면 마우스 클릭이 부모로 전달됩니다.

function pickPatch
   figure
   x = [0 1 2];
   y = [0 1 0];
   hGroup = hggroup('ButtonDownFcn',@groupCB);
   patch(x,y,'b',...
      'Parent',hGroup,...
      'HitTest','off')
   patch(x+2,y,'b',...
      'Parent',hGroup,...
      'HitTest','off')
   patch(x+3,y,'b',...
      'Parent',hGroup,...
      'HitTest','off')
end

groupCB 콜백은 hggroup에 포함된 모든 객체에서 동작합니다. groupCB 함수는 콜백으로 전달되는 콜백 소스 인수(src)를 사용하여 patch 객체의 핸들을 가져옵니다.

hggroup 객체의 핸들인 이 콜백 소스 인수를 사용하면 글로벌 데이터를 생성하거나 추가 인수를 콜백으로 전달할 필요가 없습니다.

패치를 마우스 왼쪽 버튼으로 클릭하면 세 개 패치 모두의 면 색이 임의의 RGB 색 값으로 변경됩니다.

function groupCB(src,~)
   s = src.Children;
   set(s,'FaceColor',rand(1,3))
end

콜백 함수에 대한 자세한 내용은 그래픽스 객체에 대한 콜백 만들기 항목을 참조하십시오.