Download as pdf or txt
Download as pdf or txt
You are on page 1of 83

저작권 : 오정 (http:/ / oxstart.

com)
배포처 : MATLAB 전문학교 (http:/ / matlabschool.com)
우선, M atlab 으로 작성 할 수 있는 GU I 프로그램 요소들이 갖는 의미부터 알아보도록 하
자.

대부분의 M atlab GUI 프로그램은 13개의 객체(Object ) 중에서 U i c o n t ro l , U im e n u ,


U ic on t e x tm e n u "라는 Object s에 의해서 설정할 수 있다.
이들 객체(Object )들에 대해서는 서로 간에 계층이 형성되어 있다.
그런데, m atlab v er sion이 up gr ade되면서 새롭게 추가된 것들이 많이 있다.
즉, 현재 사용하는 m atlab v er sion 에 따라서 그래프 표현 능력에 차이가 있다는 뜻이다.
예를 들면, m atlab5.0이후 버전부터 uicontr ol 요소인 fram e , listb ox 등이 나타났고, m atlab 6.0
에는 그래픽 object로 r ect an g le object가 새롭게 추가되었다.

그러나, 이들 객체를 제어하는 방법은 역시, s et .m , g et .m 함수에 의해서 이루어진다.

그러므로, 이들 13개 객체들이 갖는 여러 가지 pr op erty n am e과 그에 따른 property v alu e의


특성을 파악한다면, 쉽게 사용자가 원하는 그래프를 만들어 낼 수 있다.

m atlab5.0에 있는 g u id e .m 함수를 사용하여 GUI 프로그램을 작성하는 경우에는 보통, *.m


*.m at file이 만들어졌었다.
그러나, m atlab6.0부터는 g uide .m 함수를 사용하여 GUI 프로그램을 만드는 경우에는 *.m ,
* .f ig file이 만들어진다.

m atlab5.0에서 만들어진 *.m at file은 단순히, GUI에 관련된 dat a들만 저장하였다. 그래서,
GU I 프로그램을 만들기 위해서는 *.m file에서 고전적인 재 귀 호 출 방법을 사용해야 했었다.
그러나, m atlab6.0에서 만들어지는 *.fig file은 GUI 프로그램을 작성하는 데 필요한 재귀 호
출 r ou tin e을 포함하고 있으므로, *.m file에서는 단순히, ev en t만 처리하면, 쉽게 GUI
pr og ram 을 작성할 수 있다.

예를 들어서, [그림 1]과 같은 GUI 프로그램이 있다고 하자.


m atlab5.0에서 gu ide.m 함수를 사용하여 [그림 1]과 같은 GUI 프로그램을 만들고,
M atlab GUI.m 이라고 저장하면, 자동으로 gu ide.m 함수가 M atlab GUI.m at file을 만들어 준다.
이때, M atlab GUI.m at file에는 사용한 obj ect의 pr oprty v alu es가 저장된다.
이제, M atlab GUI.m 함수를 실행하면, M atlab GUI.m at file과 함께 [그림 1]과 같은 GUI 프로
그램을 초기화하면서 발생시킨다.
만일, 버튼을 click하는 ev ent가 발생하면, 이 ev en t는 M atlab GUI.m 함수를 재귀호출하고,
버튼에 관련된 callb ack함수가 실행하면서 GUI 모양을 갱신하게 된다.
결국, m atlab5.0버전에서는 항상, ev en t가 발생할 때마다 M atlab GU I.m 함수가 재귀호출 된
다.

- 1 -
[그림 1] M atlab 5.X GUI와 M atlab6.X GUI의 차이점.

그러나, m atlab 6.0에서 gu ide.m 함수를 사용하여 [그림 1]과 같은 GUI프로그램을 만들고,
M atlab GUI.m 으로 저장하면, gu ide.m 함수가 자동으로 M atlab GUI.fig file을 만들어 준다.
이제, M atlab GU I.m 함수를 실행하면, M atlab GUI.fig file이 호출되어 [그림 1]과 같은 GUI를
초기화하여 발생시킨다.
이제, 버튼을 click하여 ev ent를 발생시키면, M atlab GUI.m 함수가 ev en t를 처리하고, 다시,
M atlab GUI.fig file을 호출하여 버튼 click ev ent를 반영한 새로운 GUI로 갱신해 준다.
그러므로, ev ent가 발생할 때마다 M atlab GUI.m 함수는 ev en t를 처리해주는 r ou tin e만 codin g
하면, GUI를 갱신하는 것은 M atlab GUI.fig가 알아서 처리하므로, m atlab5.0과 같이 복잡한
재귀 호출을 직접 codin g하지 않아도 된다.

그러나, 실질적으로, m atlab 버전에 관계없이 GUI pr og r am 은 그 구조상 재귀 호출


m ech an ism 이 항상 사용된다.

정리하면, m atlab5.0에서는 GUI와 관련된 재귀호출을 *.m file에서 작성해야하고, m atlab6.0


에서는 GUI와 관련된 재귀호출이 *.fig file에 숨어있으므로 신경쓸 필요가 없다.
또한, *fig file은 *.m at file처럼 쉽게 그 내용을 열어서 읽어 볼 수 없다.

이번 단원에서 여러분과 함께 만들 GUI 프로그램은 [그림 2]와 같다.


GU IDem o.m 함수는 거의 모든 GU I관련 요소들을 사용한 것이다.

- 2 -
[그림 2] GU IDem o.m

주의 :
필자가 그 동안 많은 m atlab 강의를 해본 결과, 기존에 V isu al C ++, Visu al Ba sic
등으로 GU I pr ogr am 을 작성해 본적이 있는 분들은 다음에 설명할 내용이 쉽게 이
해가 가겠지만, GU I code를 처음 작성하는 분들은 다음의 내용들이 쉽게 이해가
되지 않을 것이라고 본다.
그러나, 처음에는 대충, m atlab으로 GUI pr og r am 을 만드는 대략적인 방법만 알아
두고, 다시 처음부터 보면, 이전에 이해하지 못한 부분들이 쉽게 이해가 될 것이라
고 생각한다.
그러므로, 다음에 주어진 내용들은 적어도 GUI를 처음 하는 분들이라면, 3번은 읽
어보아야 할 것이다.

- 3 -
1. Uicontr ol Object의 GUI요소 사용 방법 :

Uicontr ol Object에 속하는 GU I 요 소 (pro p e e rt y n am e )들은 사용자가 앞으로 어떠한 선택


이나, 명령(action )을 하고자 원할 때, 능동적으로 대처하기 위해서 제작된 것이다.
선택된 u icontr ol은 대부분 c allb a c k " pr operty n am e에 의해서 대응하는 함수나 M - file을 실
행하게 된다. 그러나, m atlab6.0의 g uide함수를 사용하면, callb ack 과 관련된 복잡한 내용들
은 모두 *.fig file에 들어 있으므로, 사용자는 단순히, callb ack "에 대응하는 함수나 M - file
을 직접 작성해 주면 된다.

이제, U icontr ol Object가 제공하는 요소(pr operty n am e )들에 대해서 알아보자.

*Pu sh Bu tt on
*Ch eck B ox
*P op - up m en u s
*Radio butt on s
*Slider
*E dit able tex t
*Static tex t
*fr am e
*List Box

위에서 열거한 pr operty n am e 중에서 Li s t B o x , F ra m e 은 M atlab5.0이후 버전에 추가된 기


능이다.

- 4 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

[그림1- 1]은 Uicon tr ol" Object s에 속하는 요소(pr op erty n am e )들을 나타내 본 것이다.

[그림 1- 1] Uic o nt ro l O bje c t의 요소들

[그림 1- 1]에서 (h )는 f ra m e "이라고 불리는 pr operty n am e이고, (b )는 S li de r "라고 불리는


pr operty n am e이다.

이들 9개의 요소들은 각각 고유한 성질들과 공통된 성질들을 가지고 있다.


또한, 사용하는 시스템에 따라서 [그림 1- 1]에 나온 요소들의 모양이 다를 수 있다. 그러나,
해당 요소들의 기능은 시스템에 상관없이 같다고 보면 된다.

[그림 1- 1]에 제시한 9개 요소들을 일일이 상술하자면, 너무 많은 내용을 요구하므로, 우선,


GU I 예제를 하나 만들고, 주어진 GUI 프로그램을 작성하는 방법을 설명하면서, 중간 중간
에 해당 요소들을 설명해나가는 것이 좋을 것 같다.

- 5 -
1. Uicon trol Object의 GUI요소 사용 방법

앞으로 여러분이 m atlab 의 gu ide함수를 사용하여 작성할 GUI프로그램을 [그림 1- 2]에 보였


다.

[그림 1- 2 ] GUIDe mo .m

g uide.m 함수는 GUI 요소들(즉, 버튼, slider등등)을 figu r e object에 배치시키고, 기본적인 기
능을 부여하며, 해당 *.m file과 *.fig file을 만들어 주는 함수이다.
m atlab5.0이후부터 소개된 g uide.m 함수는 m atlab6.0에서 그 기능이 상당히 향상되어 쉽게
사용자가 GUI pr ogr am 을 작성할 수 있게 도와 준다.

이제, [그림 1- 2]의 GU I 프로그램에서 Uicontr ol을 제작하는 것부터 설명해 나가겠다.

우선, M atlab com m an d w in dow 에서 g uide.m "함수를 호출해보자.

□gu ide

위와 같이 명령하면, [그림 1- 3]과 같은 un titled 1.fig "이라는 Lay ou t E ditor w in dow 가 만들


어 질 것이다.
물론, com m an d w in dow 에 있는 F ile " m enu 에서 N e w m enu 의 서브 m enu 인 GUI m enu 를
선택하여도 [그림 1- 3]과 같은 Lay ou t E ditor w in dow 가 만들어진다.

- 6 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

[그림 1- 3 ] Layo ut Ed ito r wind ow의 모습

[그림 1- 3]의 Lay out E dit or는 다음과 같은 부가적인 lay ou t t ools를 가지고 있다.

1) A lig nm en t T ool : 각각의 Com pon ent를 사용자가 원하는 위치로 정렬하는 것을 도와
준다.
2) P roperty In spect or : 해당 com pon ent의 property v alu e에 대한 edit or .
3 ) Object Br ow ser : Lay ou t A r ea에서 첨가한 com p on ent에 대한 객체들의 계층도를 보
여준다.
4 ) M enu E ditor : w in dow m enu 와 con tex t m enu 에 대한 E ditor .

모 든 GU I 작 업 은 [그림 1- 3]과 같이 con tr olled state에서만 이루어 질 수 있다.


작업이 끝나고 sav e를 하는 경우에는 fig ur e Obj ect가 A c tiv e s t a t e 로 바뀐다.
이때의 Lay out A r ea를 contr olled figu r e 라고 부른다.
이때, F ig ur e A ctiv at or icon 을 click하여 작성한 GU I를 저장하면, 사용자가 desig n한 GUI
w in dow 를 미리 볼 수 있다.

먼저, [그림 1- 2]처럼 각각의 Object s를 위치시키는 작업을 해보자.


[그림 1- 3]의 Co m p o n e n t P ale tt e 라고 lab elin g 된 영역에 속하는 A x e s 에 m ou se를 위치시
키고, 왼쪽 버튼을 누른 뒤에 Con t rolle d F i g u re 에 가져가면, m ou se poin ter가 plu s 모 양
(즉 , + ) 으로 바뀌는 것을 볼 수 있을 것이다.
이것은 현재, A x es Object를 Contr olled fig ur e에 첨가시킬 수 있다는 것을 의미한다.

m ou s e의 왼쪽 버튼을 누른 상태(pre s s e d )에서 움직여가며, [그림 1- 2]에 나와 있는 크기만


큼 A x es Obj ect를 잡아준 뒤에 m ou se의 버튼을 놓으면(re l e a s e d ), [그림 1- 4]와 같이

- 7 -
1. Uicon trol Object의 GUI요소 사용 방법

A x es Object가 생성 될 것이다.

[그림 1- 4 ] Axe s Obje c t의 생성

[그림 1- 4]와 같이 새로운 A x es Object를 figu r e에 첨가시킨 뒤에, [그림 1- 3]에 있는


P rop e rt y In s p e c t o r를 선택 해본다.

그러면, [그림 1- 5]와 같은 P rop e rty In s p e c t o r가 만들어 질 것이다.

[그림 1- 5 ] Pro pe rty Ins pe cto r Wind ow.

[그림 1- 5]를 살펴보면, 앞에서 배운 A x es Object에 속하는 pr op erty n am es와 각각의


pr operty v alu e s가 나열되어 있는 것을 알 수 있을 것이다.

- 8 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

조정하고 싶은 pr operty n am e이 있다면 해당 pr operty v alu e를 m ou s e로 클릭한 뒤에 조정해


주면 된다.
원하는 pr operty n am es에 대해서 편집을 하였으면 반드시 Lay out E dit or에서 저장을 해 주
어야 한다.

이제, [그림 1- 3]의 Ob j e c t B ro w s e r icon을 click 하면, [그림 1- 6]과 같이 Object Br ow ser
w in dow 가 나타난다.

[그림 1- 6 ] Obje ct Brows e r wind ow

현재, Lay out E ditor상에서 존재하는 Object는 F igu r e Object와 그 low er lev el인 ax es
object , 이렇게 2개가 존재한다는 것을 보여주고 있다.
앞으로, [그림 1- 3]의 Lay ou t A r ea에 첨가되는 모든 Com p on ent s는 [그림 1- 6]에 계층별로
첨가될 것이다.
임의의 object it em , 예를 들면, ax es (ax es 1) object를 m ou s e로 dou ble click하면, 해당
P roperty In spect or w in dow 가 나타난다.
여기서, m in u s 기 호 (즉 , - ) 은 해당 객체의 low lev el Object s가 아래에 나열되어 있다는
것을 말해준다.
즉, fig ur e Object의 low lev el Object인 A x es Object가 figu r e Obj ect의 아래에 표시되어 있
는 뜻이다.
그러나, plu s 기 호 (즉 , + ) 은 해당 객체의 low lev el Object s가 아래에 나와 있지 않다는
것을 의미한다.
그러므로, A x es Object의 low lev el Object s를 편집하기 위해서는 plu s 기 호 를 m ou se로
클릭하면 된다. 그러면, A x es Object의 하위 lev el object s가 A x es object it em 아래에 나열
된다.

[그림 1- 2]에 있는 P u s h b u t t on "을 [그림 1- 5]에 설치 해보자.


A x es Object를 설치했던 방법으로 하면 된다.

2편 에 서 계 속 ...

- 9 -
1. Uicon trol Object의 GUI요소 사용 방법

[그림 1- 7]은 3개의 P u sh butt on 을 설치 한 경우의 모습이다.

[그림 1- 7 ] 3 개의 Pus h Butto n 설치.

[그림 1- 7]은 m ou s e로 3개의 pu sh butt on 을 선택한 것이다.


이처럼 선택 된 Object s의 주위에는 직사각형의 작은 점 들 이 둘러싼다.

Object s를 선택하는 방법으로는 [그림 1- 6]에 있는 Object br ow s er에서 원하는 object s를


m ou s e로 클릭 하거나, 또는 , Con tr olled figu re에서 원하는 Object s를 m ou se로 선택하면 된
다.

그리고, 여러 개의 Object를 동시에 선택하는 방법은 w in d o w 탐 색 기 에서 디렉토리나, 파일


을 선택하는 방법과 동 일 하 다 .
또한, Con tr olled figu r e에서 Object를 복 사 하 는 방 법 도 동 일 하다. 즉, 원하는 object를 click
한 뒤에 c t rl +c k e y 클릭하면 된다. 그리고, 복사하고 싶은 영역에서 c t rl +v k e y 를 누르면
해당 Object의 복 사 가 이 루 어 진 다 .
그러나, m ou se로 object를 선택하고 ctrl k ey 를 pr es s하여 복사하는 방법은 사용할 수 없다.
만일, Object를 잘못 설치하여 지우고 싶을 때는, delete k ey 를 사용하면 된다.

- 10 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

주의 :
m atlab5.0에서는 m ou se로 선택한 obj ect를 delet e k ey 로 지울 수 없고, 해당 delet e
m en u를 선택해야한다.

[그림 1- 7]에 있는 3개 pu shb utton은 정렬이 안되었다.


이처럼 Object의 정 렬 (A li g n m e n t )을 하고 싶은 경우에는 정렬하고자 원하는 obj ect들을
m ou s e로 선택하고, [그림 1- 3]에서 A li g n m e n t T o o l을 선택하면 된다.
그러면, [그림 1- 8]과 같이 A lig n Object s라고 적혀 있는 w in dow 가 생성 될 것이다.

[그림 1- 8 ] Alig nme nt To o l의 모습

A lign m ent tool에서 노란색의 직사각형으로 표현된 것이 object s를 나타낸다.


예를 들어서, [그림 1- 9]와 같이 A , B , C라는 3개의 pu sh butt on 이 있다고 하자.

- 11 -
1. Uicon trol Object의 GUI요소 사용 방법

[그림 1- 9 ] GUI Obje cts 의 정렬방법.

[그림 1- 10]처럼, B의 왼쪽 모서리를 중심으로 정렬하고자 원하는 경우에, m ou s e를 ru ler근


처에 놓으면, m ou se의 cu r sor가 양방향 화살표로 바뀐다.
이때, m ou se를 B의 왼쪽 모서리까지 dra g하여 놓으면, [그림 1- 10]처럼, 파란색의 기준선이
나타난다.
물론, g uide lin e은 [그림 1- 3]처럼, 위쪽에서도 나타날 수 있고, 여러 개의 g uide lin e을 사
용 할 수도 있다.

[그림 1- 10 ] g uid e line 사용 방법.

이제, m ou s e로 나머지 A , C object를 [그림 1- 11]처럼, g uide lin e 오른쪽으로 옮겨 놓는다.

- 12 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

[그림 1- 11] Bo und ing Box.

그리고, ctrl k ey 를 누른 상태에서 m ou se로 A , B , C object를 모두 선택하거나, m ou s e를


dr ag 하여 A , B , C object를 모두 선택한다.
[그림 1- 11]에 있는 B ou n din g B ox 가 object s 정렬의 기준이 된다.
즉, 선택한 object s를 포함하는 최소한의 사각형을 b ou n din g b ox 라고 하는데, [그림 1- 8]에

있는 alig nm en t t ool에서 icon을 click하고, apply b utton을 click하면, Boun din g B ox 의


왼쪽 모서리를 기준으로 정렬된다.
그밖에 어떠한 정렬 icon 을 click하더라도 b ou n din g b ox 를 기준으로 정렬이 이루어진다.

정리하면, 정렬하고자 원하는 obj ect s를 선택하고, 선택된 object s를 포함하는 최소한의 직사
각형인 b oun din g b ox 를 기준으로 정렬 icon을 click하면, 원하는 정렬이 이루어진다.
솔직히, g uide lin e은 object s의 정렬을 수행하는데, 어떠한 영향을 미치지는 않는다.
또한, object를 click한 순서에 따라서 정렬되는 것이 아니라, 오로지 b oun din g b ox 를 기준
으로 정렬이 수행된다는 점에 주의하자.

이제, [그림 1- 11]처럼, A , B , C object s가 B object의 왼쪽 모서리를 기준으로 정렬된다.

- 13 -
1. Uicon trol Object의 GUI요소 사용 방법

[그림 1- 12 ] A, B, C Obje c ts 의 정렬.

이들 3개의 slider의 폭(w idth )과 높이(h eigh t )의 길이를 같게 하기 위해서는 [그림 1- 12]와
같이 3개의 slider를 모두 선택한 상태에서 Pr operty In spect or icon 을 선택하거나, m ou s e의
오른쪽 버튼을 click하여 [그림 1- 13]과 같은 popup m en u를 발생시켜서 Pr operty In spector
m en u를 선택한다.

[그림 1- 13 ] Pro pe rty Ins pe c to r의 선택.

그러면, [그림 1- 14]와 같이, 3개의 slider에 속하는 property n am e을 동시에 조정할 수 있는
P roperty In spect or w in dow 가 나타난다.

- 14 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

[그림 1- 14 ] Pro pe rty Ins pe cto r Wind ow.

pr operty n am e 중에서, position it em 의 왼쪽에 있는 plu s기호를 m ou s e로 click해 주면, [그림


1- 14]와 같이 3개의 slider에 대한 position v alu es가 나타난다.

[그림 1- 12]에서는 3개의 slider에 대한 x - v alu es만 alig nm en t 해 주었으므로, x 값은 대략


83.8값으로 동일하지만, y , w idth , h eig ht는 3개의 slider 모두 서로 다른 값을 가지므로,
M ix e d라고 설정되어 있을 것이다. 이제, 높이와 폭을 동일하게 하기 위해서, [그림 1- 15]와
같이 w idth 는 19.0, 그리고, h eig ht는 1.15라고 지정해 주자.

각각의 pr op erty n am e에 속하는 pr operty v alu e를 편집해 주기 위해서는, 우선, 편집해 주고싶
은 pr op erty n am e을 m ou se로 선택한다, 그러면, [그림 1- 15]와 같이 진한 녹색으로 선택한,
pr operty n am e이 표시된다. 이때, 원하는 pr op erty v alu e를 ty pin g 해주면 된다.

pr operty v alu e를 편집한 뒤에는 반드시 Lay out E dit or의 저장 버튼을 click해 주어야 편집된
내용이 반영된다.

- 15 -
1. Uicon trol Object의 GUI요소 사용 방법

[그림 1- 15 ] Pro pe rty Ins pe cto r의 사용 방법.

이제, 3개의 slider들 사이의 폭을 align m ent t ool을 사용하여 적당하게 분포시켜 주기 위해
서 [그림 1- 16]과 같이 설정해 준다.(distribu tion )

[그림 1- 16 ] Obje c ts 의 d is trib utio n.

지금까지 여러분들은 m atlab 6.0에서 제공하는 alig nm en t t ool을 사용하는 방법을 배웠다.
앞으로의 object s의 설정 방법을 보다 쉽게 배우기 위해서, [그림 1- 17]과 같이 P refer en ces
m en u를 선택하여 준다.
그러면, [그림 1- 18]과 같이, pr efer en ce w in dow 가 나타날 것이다.
여기서, "Sh ow n am es in com pon en t palett e"을 선택하고 OK버튼을 click해 준다.

- 16 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

그러면, [그림 1- 12]에 있는 com pon en t p alett e의 모양이 [그림 1- 19]와 같이 바뀐 것을 알


수 있을 것이다.

[그림 1- 17 ] Pre fe re nc e me nu 사용 방법.

[그림 1- 18 ] Pre fe re nc e Wind ow.

- 17 -
1. Uicon trol Object의 GUI요소 사용 방법

[그림 1- 19 ] Co mpo ne nt pa lette 의 모양이 바뀌었다.

[그림 1- 2]를 완성하기 위해서는 그 밖의 여러 object s가 필요한데, 2개의 editb ox 를 설정하


는 방법을 더 배워보자.

이들 2개의 editb ox 를 com pon en t p alett e에서 선택하여 위치시킨다.


그리고, [그림 1- 2]에 있는 것처럼, 위쪽에 있는 editb ox 에 - 10:0.1:10; 의 s t rin g 을 입력하
기 위해서 위쪽에 있는 editb ox 를 m ou se로 선택하고, Pr operty In spect or w in dow 를 [그림
1- 20]과 같이 불러온다.

[그림 1- 20 ] Ed itbox의 Pro pe rty Ins pe cto r

- 18 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

그리고, [그림 1- 20]처럼, Strin g pr operty n am e을 m ou s e로 선택하고, 그 옆에 있는 icon 을


click하면, [그림 1- 21]과 같이 Strin g property n am e에 대한 property v alu e를 편집할 수 있는
w in dow 가 나타난다.
이곳에, 문자열을 나타내주는데 필요한 단일 인용부호 없이 - 10:0.1:10;와 같이 ty pin g 해 주
고 OK 버튼을 click하면, editb ox 에 - 10:0.1:10;이 입력된 것을 볼 수 있을 것이다.

[그림 1- 2 1] String pro pe rtyna me 의 편집.

같은 방법으로, 아래쪽에 있는 두 번째 editb ox 에는 sin (x )라고 입력 해 주자.

이들, editb ox 에 입력해 준, 문 자 열 들은 GUI pr ogr am 이 처음 만들어 질 때, 사용할 초 기 값


들이다.

이제, fr am e object를 선택하여 2개의 editb ox 를 적당하게 포함하도록 위치시킨다.


이때, fram e b ox 를 editb ox 보다 나중에 위치시키므로, editb ox 가 fr am e b ox 에 가려서 보이
지 않을 것이다.
이때에는 fr am e b ox 를 선택하고, m ou se의 오른쪽 버튼을 click하면, [그림 1- 22]와 같이
p opup m en u가 나타날 것이다.
여기서, [그림 1- 22]와 같이 sen d to b ack 버튼을 click하면, fr am eb ox 가 뒤로 가고, editb ox
사 앞으로 나와서 [그림 1- 2]와 같이 된다.

- 19 -
1. Uicon trol Object의 GUI요소 사용 방법

[그림 1- 22 ] Obje ct들의 laye r간 위치 설정 방법.

이제, [그림 1- 2]와 같이 slider옆에 static t ex t를 위치 시켜주고, 각각의 static t ex t의 strin g


color를 바꾸어 주기 위해서, pr operty in spector w in dow 에 있는 for eg roun d color
pr operty n m e의 pr operty v alu e를 적당히 바꾸어 주자.
그리고, listb ox 를 [그림 1- 2]와 같이 위치시켜준다.
이제, listb ox 에 item 들을 첨가시켜 주려면, property in spect or w in dow 에 있는 strin g
pr operty n m e의 pr operty v alu e를 [그림 1- 23]과 같이 바꾸어 주면 된다.

[그림 1- 23 ] lis tbox 에 ite m들을 첨가하는 방법.

[그림 1- 23]에 보여준, strin g w in dow 에서 문자열을 입력하는 방법은 일반 w in dow s의


n ot ep ad에 문자열을 입력하는 방법과 동일하다.
같은 방법으로, [그림 1- 2]에 있는 popup m enu 를 위치시키고, listb ox 에 item 들을 입력하는
방법과 동일하게 popupm enu 에 item 들을 첨가 시켜주자.
p opupm en u에서 사용될 it em 들은 listb ox 와 동일하므로, [그림 1- 23]과 같이 IT EM 들을 입력
해 주면 된다.

- 20 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

이제, 여러분들은 지금까지 배운 방법으로, [그림 1- 2]와 같이 각각의 com pon ent들을 위치
시키고, 정렬하고, 초기 문자열들을 설정해 줄 수 있을 것이다.
모든, com pon en t들을 [그림 1- 2]와 같이 위치시켜 주면, [그림 1- 24]와 같이 될 것이다.

[그림 1- 24 ] GUIDe mo .fig file

만일, [그림 1- 3]에 있는 F ig ur e A ctiv at or icon 을 click 하여, GUIDem o w in dow 를 미리 볼


때, 나타나는 w in dow 의 크기가 마음에 안 들면, [그림 1- 3]에 있는 F ig ur e re sizer부분에
m ou s e를 놓고, 원하는 w in dow size로 dr ag 해 주고 저장해 주면 된다.

이제, 여러분이 만든 GUIDem o.m 함수를 m atlab의 desk top에 있는 com m an d w in dow 에서
다음과 같이 실행해 보자.

> > GUID em o

이때, [그림 1- 25]와 같이 나타나면, 제대로 desig n 한 것이다.

- 21 -
1. Uicon trol Object의 GUI요소 사용 방법

[그림 1- 25 ] GUIDe mo .m 함수의 실행 결과.

이번에는 peak s .m 함수를 다음과 같이 실행해 보자.

> > p eak s

위와 같이 실행하면, peak s에 해당하는 그래프가 [그림 1- 25]에 있는 ax es object에 들어가


는 것이 아니라, 새로운 figu r e object에 [그림 1- 26]과 같이 나타날 것이다.

[그림 1- 26 ] pe a ks .m 함수의 실행결과.

여기서, 여러분이 주의할 것은 gu ide.m 함수에 의해서 만들어지는 모든 GUI fig ur e object의
h an dle은 H an dle V i s ib ilit y 가 o f f라는 것이다.

- 22 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

이것은, 사용자가 실수로 g uide.m 함수에 의해서 만들어진 GUI fig ur e object를 편집하지 못
하도록 하기 위해서이다.
또한, g uide .m 함수에 의해서 만들어지는 fig ur e obj ect의 h an dle v alu e는 자연수가 아니라,
소수로 주어지게 되어 있다.

이제, p eak s .m 함수를 실행하였을 때, p eak s에 해당하는 그래프가 [그림 1- 25]의 ax es object
에 쏙 들어가도록 하기 위해서는 다시 g uide.m 함수를 실행하여, GUID em o.fig file을 불러오
고, fig ur e object에 해당하는 부분을 m ou se로 dou ble click하거나, 또는 object br ow s er에서
figu re object를 m ou se로 dou ble click하면, [그림 1- 27]과 같이 Pr op erty In spector w in dow
가 나타날 것이다.
여기서, pr operty n am e 중에서,h an dlev isibility 의 pr op erty v alu e가 o f f 로 되어 있는 것을 볼
수 있다. 이것을 o n 으로 바꾸어 주자.
그리고, 저장한 뒤에, 다시, GUIDem o.m 함수를 실행하고, peak s .m 함수를 실행하면, peak s .m
함수에 해당하는 그래프가 GUIDem o.m 함수의 ax es object에 쏙 들어가 있는 것을 볼 수 있
을 것이다.
그러나, 이 fig ur e object의 h an dle v alu e는 1 이 아니라, m atlab이 난수적으로 소수를 할당
한 것을 조사할 수 있을 것이다.
그러므로, GUID em o.m 함수의 figu re object의 h an dle v alu e로 일반적인 fig ur e object의
h an dle v alu e처럼, 자연수로 할당하기 위해서는 [그림 1- 27]에 있는 In t e g e rH a n dle 의
pr operty v alu e를 o n 으로 해 주어야 한다.

[그림 1- 27 ] Fig ure Obje ct의 Pro pe rty Ins pe cto r

그리고, [그림 1- 25]에 있는 GUIDem o.m 함수의 fig ur e obj ect에는 m en ub ar가 없고, fig ur e
title도 u ntitled로 되어 있다.
먼저, figu re object의 m enu b ar를 정상적으로 보여주기 위해서는 [그림 1- 27]의 m en ub ar
pr operty n am e의 property v alu e를 f ig u re 로 바꾸어 주어야 하고, fig ur e title을 바꾸어 주기

- 23 -
1. Uicon trol Object의 GUI요소 사용 방법

위해서는 n am e pr operty n am e의 property v alu e에 원하는 strin g을 넣어 주면 된다.


즉, [그림 1- 28]과 같이 [그림 1- 27]을 수정해 보자.

[그림 1- 28 ] Fig ure Obje ct의 p ro pe rtyva lue 를 수정한 결과.

그리고, 다시, 다음과 같이 명령하여 보자.

> > clos e all


> > clear all
> > GUID em o
> > p eak s

위와 같이 명령하면, [그림 1- 29]와 같이 peak s에 해당하는 그래프가, GUIDem o.m 함수의


ax es obj ect에 들어가 있고, 또한, m enu b ar와 figu re title이 편집한 대로 바뀌어 있는 것을
볼 수 있을 것이다.

- 24 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

[그림 1- 29 ]

지금까지 여러분은 GU IDem o.m 함수에 대한 기본적인 준비작업을 수행하였다.


이제, 직접, GUIDem o.m 함수의 code를 수정해 가면서, [그림 1- 2]와 같이 수행하도록 해보
자.
g uide.m 함수를 사용하여 GUIDem o.fig file을 저장하면, 동시에, m atlab이 GUID em o.m 함수의
code 부분을 m atlab edit or를 사용하여 보여 줄 것이다.
그러나, 이것은 g uide함수를 사용하여 GUI pr ogr am 을 만들 때 *.m file과 *.fig file을 동시
에 만들어 주도록 option 을 지정하여 주었기 때문이다.
즉, [그림 1- 30]과 같이 g uide함수의 Lay ou t E ditor에 A pplication Option s ... m en u를 선택하
면, [그림 1- 31]과 같이 GUIDE A pplication Option s w in dow 가 나타날 것이다.
여기서, "Gen er at e .fig file an d .m file" option 을 선택하였으므로, gu ide 함수로 만들어진
GU I pr og ram 의 *.fig file과 *.m file이 만들어 진 것이다.

- 25 -
1. Uicon trol Object의 GUI요소 사용 방법

[그림 1- 30 ] Ap plic a tio n Optio ns .

[그림 1- 3 1] GUIDE Ap p lic atio n Optio ns .

그밖에도 [그림 1- 31]을 보면, 여러 가지 유용한 option 들이 있는 것을 볼 수 있는데, 정리하


면, 다음과 같다.

1) R esize Beh av ior option : 이것은 g uide 함수로 만들어질 fig ur e object의 r esize
pr op erty n am e에 대한 것이다.
(1) N on - r esizable : g uide함수로 만들어진 figu r e object는 크기를 m ou s e로 조정할 수
없는 w in dow 가 된다.(d e f au lt )
(2) Pr oportion al : m atlab이 자동으로 GUI progr am 에 있는 여러 com pon ent s의 크기를
figu re object의 크기에 비례하게 조절해 준다.

- 26 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

(3 ) U ser - sp ecified : 사용자가 figu r e w in dow 의 크기를 조절할 때, 사용자가 정의한 어


떤 방법으로 GU I com pon en t와 fig ur e object의 크기를 조절하도록 한다.

2) Com m an d - lin e acces sibility :


(1) Off : Com m an d lin e에서 GUI fig ur e에 명령을 할 수 없다. (de f a u lt )
그러므로, defau lt로 settin g 하고, GUI fig ur e를 만들면, p eak s에 해당하는 그래프가
GU I figu re에 있는 ax es object에 들어가지 않는 것이다.
(2) On : Com m an d lin e에서 GUI figu re에 명령을 할 수 없다. 즉, F ig ur e Object의
H an dleV isibility 를 On으로 한 것과 같다.
(3 ) U ser - sp ecified : 실질적으로 의미가 없는 option 이다.

3 ) Gen er at e .fig an d .m file : *.m , *. fig file을 모두 만들어 준다.


(1) Gen er at e callb ack fun ction pr ot oty p es :
g uide함수로부터 만들어진 *.m file에 각각의 com p on ent에 대한 callb ack fu n ction 의
pr ot oty pe을 첨가해준다. 생성되는 callb ack fun ction 의 fu n ction n am e은 해당
com pon en t의 t ag에 설정한 문자열에 _Callb ack을 첨가한 것이다.
즉, pu shb utton의 t ag pr operty n am e을 P Butt on 이라고 하였다면, 생성되는 *.m file에
첨가되는 callb a ck fu n ction 의 fun ction n am e은 PButt on _Callb ack으로 주어진다.
(2) A pplication allow s on ly on e in st an ce to run :
해당 GUI pr og r am 을 몇 개 만들 것인지를 결정해 준다.
즉, A pplication allow s only on e in stan ce to ru n option을 해지한 뒤에
GU IDem o.m 함수를 실행하고, 또 다시, GUIDem o.m 함수를 실행하면, 2개의
GU IDem o.m w in dow 가 만들어진 것을 볼 수 있을 것이다.

그 밖의 option s는 [그림 1- 31]로부터 쉽게 알 수 있을 것이다.

이제, GU IDem o.m 함수의 code부분을 살펴보자.


여기서주의 할 것은, 독자가 GUI pr og r am m in g 방법을 쉽게 이해하기 위해서 GUIDem o.m
함수의 code를 직접 설명하는 것이 아니라, 새롭게 GU IDem o.m 함수와 같은 기능을 수행하
는 t est .m 함수를 만들어 나가면서 설명하는 방식으로 할 것이다.

그러므로, t est .m 함수를 만들 때까지 자리를 뜨지 말고 정신을 집중하여 이 책에서 설명한


대로 따라해 보기 바란다.

우선, [그림 1- 2]와 같이 GUID em o.m 함수를 design 하는 방법은 모두 배웠으므로, gu ide 함
수의 F ile/ N e w m enu 를 선택하여 새로운 con trolled st at e에 있는 fig ur e object를 만들고,
GU IDem o.fig file에서 E dit/ S e le c t A ll m en u를 선택하고, c trl +c 를 하고, 새로 만든 figu r e
object에 c t rl +v 를 하여 pa ste해준다.
그리고, GUIDem o.m 의 figu re object와 크기가 같도록 pr operty In sp ect or를 사용하여
p osition의 값을 동일하게 한다. 물론, 2개의 figu r e obj ect에 U n it s 도 동일해야 한다.

- 27 -
1. Uicon trol Object의 GUI요소 사용 방법

그러면, [그림 1- 32]와 같이 GUIDem o.fig file과 동일한 모양이 될 것이다.


또한, F ig ur e Object의 H an dleV isibility 는 o n 으로 하고, In t e g e rH a n dle 도 역시, o n 으로 지
정하자.
이제, t est .fig file로 저장한다.
그러면, M atlab editor에 의해서 자동으로 t est .m 함수가 만들어지면서, 해당 code를 m atlab
editor로 보여 줄 것이다.

[그림 1- 32 ] te s t .fig file

이제, t est .m 함수의 내용을 살펴보자.

%%%%%%%%%%%%%%%%%%%% te st .m %%%%%%%%%%%%%%%%%%%%%
fu n ction v ararg ou t = t est (v ar ar gin )
% T E ST A pplication M - file for te st .fig
% F IG = T E ST lau n ch test GUI.
% T E ST (' callb ack _n am e ' , ...) in v ok e th e n am ed callb a ck .
% La st M odified by GUIDE v 2.0 17 - Ju l- 2001 19 :43 :44
▶ ①
if n ar gin == 0 % LA U N CH GUI
fig = open fig (m filen am e,'r eu se ' ); ▶ ②
% U s e sy st em color s ch em e for fig ur e :
set (fig ,' Color ' ,g et (0,' defaultUicontr olBack gr oun dColor ' ));
% Gen er at e a stru ctur e of h an dle s to pa s s to callb ack s , an d st or e it .
h an dles = g uih an dles (fig ); ▶ ③
g uidat a (fig , h an dles ); ▶ ④
if n ar g out > 0
v ar ar g out {1} = fig ;

- 28 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

en d
elseif isch ar (v ar ar gin {1}) % INV OKE NA M ED SUBF UN CT ION OR CA LLBA CK
try
[v ar ar g ou t {1:n ar g out }] = fev al(v ar ar gin {:}); % F EV A L s w it chy ard
cat ch
disp (la st err );
en d
en d
%%%%%%%%%%%%%%%%%%%% te st .m %%%%%%%%%%%%%%%%%%%%%

우선, t est .m 함수의 입력 매개변수로 여러분은 앞에서 배운 v ar ar gin이 사용되고 있고, 출


력 매개변수로 v ar ar g ou t이 사용되는 것을 볼 수 있다. 또한, cell dat a ty pe이 사용되고, try
와 cat ch가 사용되는 것을 볼 수 있다.
이들 항목들은 앞으로 계속해서 사용되므로 기억이 나지 않는 분들이 다시 해당 항목에 대
한 설명을 참고하기 바란다.

t est .m 함수의 첫 번째 내용은 com m an d w in dow 에서 t est .m 함수를 호출할 때, 입력 매개변


수가 하나도 없으면(즉, if n ar gin == 0), ②번 lin e부터 시작하라는 뜻이다.

② lin e에서 사용되는 open fig .m 함수의 전형적인 사용 방법은 다음과 같다.

전형적인 사용방법(Sy n tax ) : Op e n f i g .m


Op e n f ig .m : 저장되어 있는 fig ur e를 m atlab deskt op으로 불러오는 함수.
이 함수는 저장되어 있는 figu r e를 m atlab desktop으로 불러오고, 불러온 fig ur e의
h an dle을을 돌려준다. 그러나, 주어진 fig ur e h an dle은 감추어진다는 것에 주의하라.
(즉, H an dleVisibility = off)
open fig .m 함수는 2번째 입력 매개변수에 따라서 다음과 같은 동작을 수행한다.
(1) open fig ('filen am e.fig ' ,'n ew ' ) :
저장되어 있는 *.fig file을 open fig .m 함수를 호출 할 때마다 매번 불러온다. 여
기서, 입력 매개변수로 주어진 *.fig file이 m atlab 경로 중에 있다면, 정확한 경
로명을 기술할 필요가 없다. 그리고, fig 확장자는 사용하지 않아도 된다.
(2) open fig ('filen am e.fig ' ,'r eu s e ' ) :
저장되어 있는 *.fig file을 단 한번 불러온다.
(3 ) open fig ('filen am e.fig ' ) :
openfig ('filen am e.fig ' ,'n ew ' )과 같은 기능을 수행한다.
(4 ) fig ur e_h an dle = open fig (...) :
저장되어 있는 fig ur e의 h an dle을 돌려준다.

- 29 -
1. Uicon trol Object의 GUI요소 사용 방법

결국, ② lin e을 수행하면, 현재, GUI figu re의 h an dle을 얻을 수 있고, 반환된 h an dle은 fig
변수에 저장된다.

③ lin e에서는 gu ih an dle s .m 함수를 사용하여 현재 GUI fig ur e에 있는 모든 object s에 대한


h an dles를 구조체의 양식으로 얻을 수 있다.
즉, te st .m 함수의 ①번이 가리키는 곳에 g lo b al h a n dle s 라고 codin g 하고, 저장한 뒤에 다음
과 같이 실행해 보자.

> > t est


> > g lob al h an dles
> > h an dle s

h an dles =

fig ur e1: 1
pu shb utton 1: 123.0005
t ex t 14 : 122.0005
t ex t 13 : 121.0005
t ex t 12: 120.0005
t ex t 11: 119.0005
t og glebu tt on 1: 118.0005
t ex t 10: 117.0005
t ex t9 : 116.0005
edit 2: 115.0005
edit 1: 114.0005
t ex t8 : 113.0005
popupm enu 1: 112.0005
t ex t7 : 111.0005
listb ox 1: 110.0005
t ex t6 : 109.0005
ch eck b ox 3 : 108.0005
ch eck b ox 2: 107.0005
ch eck b ox 1: 106.0005
t ex t5 : 15.0009
r adiobutt on 3 : 14.0009
r adiobutt on 2: 13.0009
r adiobutt on 1: 12.0009
t ex t4 : 11.0009
t ex t3 : 10.0009
t ex t 2: 9.0009

- 30 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

t ex t 1: 8.0009
slider3 : 7.0009
slider 2: 6.0009
slider 1: 5.0009
fr am e2: 4.0012
fr am e1: 105.0005
ax es 1: 100.0005

위와 같이, g uih an dles .m 함수를 사용하면, 현재 활성화되어 있는 fig ur e object에 있는 모든


object들에 대한 h an dle값을 얻을 수 있다.

4 편 에 서 계 속 ...
(이어지는 내용 ☞ gu ih an dle s의 전형적인 사용 방법)

- 31 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법

[그림 1- 23]과 같이 listb ox 에 item을 첨가하였던 것을 기억해보자.


이들 listbox에 첨가된 it em 들 각각은 문자열이지만, 이들 문자열들은 listbox 의 s t rin g
pr opertyn am e에 c e ll dat a type으로 저장된다.
그러므로, listbox 에 있는 각각의 it em 에 접근하기 위해서는 cell의 in dex를 지정하는 데 사
용하는 중괄호(즉, {,})를 다음과 같이 사용해야 한다.
즉,

% --------------------------------------------------------------------
function v ararg out = L sitM arkF ace_Callba ck (h , ev ent dat a , h andles , v ar ar gin )
% Stub for Callback of the uicontr ol han dles .L sitM arkF ace.
GUIDem o( 'listbox 1_Callback ' ,gcbo,[],guidata (g cbo)) ▶ ①
①번 line은 삭제하고, 다음과 같은 code를 첨가해 본다.
M ark erE dg eColor =g et (h ,' string ' ); ▶ ②

L sitM arkF ace_Callback함수의 첫 번째 입력 par am et er인 h 는 listbox 자신의 h andle을 의미


하므로, ②번 lin e으로부터 listb ox 의 item들을 모두 M arkerE dgeColor에 저장할 수 있다.

주의 :
M ark erE dg eColor에는 listbox 에 있는 모든 it em 의 문자열들이 cell dat a type으로 저
장되어 있다는 데 주의하자!

t est .m 함수의 맨 첫째 줄에 glob al M arkerE dgeColor이라고 선언하고, ②번 lin e앞에도


global M arkerE dg eColor이라고 선언한 뒤에, m atlab desktop에 있는 com m and w indow 에
서 다음과 같이 실행해 보자.

> > t est

listb ox 를 click해 본다. 그리고, 다음과 같이 명령을 계속해 본다.

> > global M ark erE dg eColor


> > M arkerE dg eColor

M arkerE dgeColor =

'r '
'g '
'b '
'c '

- 49 -
1. Uicontrol Object의 GUI요소 사용 방법

'm '
'y '
'k '
'w '

> > cla s s (M arkerE dg eColor )

an s =

cell

listb ox 에 있는 각각의 it em 들은 1 , 2 , 3 과 같은 방식으로 각각의 item에 자동으로 index 가


부여된다.
그러므로,

Index List =g et (h ,'v alu e ' );


set (han dles .Line_h andle ,' m ark erfacecolor ' ,M arkerF aceColor {Index List });

의 code를 첨가해 주면 listbox를 사용하여 m arkerfacecolor를 바꾸어 줄 수 있다.

이제, t est .m 함수에 부여한 glob al M arkerE dg eColor는 모두 지우고, 저장한다.


그리고, t est .m 함수를 실행하고, 각각의 listbox item을 click할 때마다 m arker의 face color
가 바뀌는 지 확인해 보자.

주의 :
listb ox 와 popupm enu에 포함되어 있는 it em 들의 index 는 1 부터 시작한다는 데 주
의하자.

이제, popupm enu com ponent를 사용하는 방법을 알아보자.


사실, checkb ox 와 r adiobutt on은 모양만 틀리지, 사용방법은 같다. 마찬가지로, listb ox 와
popupm enu도 모양만 틀리고 사용방법은 동일하다.
우리는 popupm enu를 사용하여 plottin g되는 line에 첨가되는 m arker의 모서리(edg e ) color를
바꾸어 볼 것이다.
우선, popupm enu에 대한 callb ack함수의 pr ot ocol을 te st .m 함수에 첨가하고, 다음과 같은
code를 callback함수에 추가해 보자.

- 50 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법

%%%%%%%%%%%%%%%%%% t est .m %%%%%%%%%%%%%%%%%%%%%%%


function v ararg out = P opM arkE dg e_Callback (h , ev entdat a , han dles , v ar ar gin )
% Stub for Callback of the uicontr ol han dles .P opM arkE dg e.
M ark erE dg eColor =g et (h ,' string ' );
In dexP opup =g et (h ,'v alu e ' );
s et (handles .Lin e_han dle,'M arkerE dg eColor ' ,M arkerE dgeColor {In dexP opup });
%%%%%%%%%%%%%%%%%% t est .m %%%%%%%%%%%%%%%%%%%%%%%

listb ox 에 첨가한 code와 비교해 볼 때, 단지, m arker의 edg e color를 제어하기 위해서,
m arkerfacecolor pr opertynam e 대신에 m arkeredg ecolor를 첨가한 것만 다른 것을 알 수 있
을 것이다.
이제, 저장하고, te st .m 함수를 실행해 보자.
우선, m arker type에서 Diam on d r adiobutton을 click하고, popupm enu에서 적당한 m arker
edg e color를 선택한다.
그러면, ax es object에 있는 line의 m arker edge color가 popupm enu에서 선택한 color로 바
뀌는 것을 알 수 있을 것이다.

이제, t ogglebutton을 제어하는 방법을 살펴보자.


t ogglebutton은 일반적인 pu shbutton과 달리, m ou s e로 click하면, [그림 1- 40(a )]와 같이 버
튼이 눌려 진 모양을 가지며, 다시 m ou se로 click하면, 버튼이 나온 모양을 갖는 형태의
button이다.

[그림 1- 40 ] To gg le b utto n의 State s .

[그림 1- 40(a )]와 같이 t og glebutt on이 눌린 상태에는 v alu e 가 1 이고, r elea sed st at e에서는
v alu e가 0 이 된다.
GUIDem o.m 함수에서는 t ogglebutton을 이용하여 F igur e Object의 크기를 조절하고 있다.
즉, 현재 figur e object의 크기는 [232 269 739 409]인데, t ogglebutton을 click하면, figur e
object의 크기가 [232 269 529 409]과 같이 폭(w idth )이 739에서 529로 작아지도록 만들
것이다. 물론, unit s는 pix els로 동일하다.
위와 같이 togglebutt on을 사용하기 위해서는 먼저 guide함수에 callback함수의 prot ocol을
t est .m 함수에 첨가해 주어야 한다.
그리고, 다음과 같이 coding해 주면 될 것이다.

- 51 -
1. Uicontrol Object의 GUI요소 사용 방법

%%%%%%%%%%%%%%%%%% t est .m %%%%%%%%%%%%%%%%%%%%%%%


function v ararg out = T GM L_Callback (h , ev ent data , h andle s , v ar ar gin )
% Stub for Callback of the uicontr ol han dles .T GM L .
% --------------------------------------------------------------------
CurrentF igureP os =g et (h andle s .figur e1,'pos ' ); ▶ ①
if g et (h ,' v alu e ' ) ▶ ②
set (h andles .figur e1,'pos ' ,[Curr entF igur eP os (1) Curr entF igur eP os (2) 529 ... ▶ ③
Curr entF igur eP os (4)])
set (h ,' strin g ' ,'M or e> > ' ) ▶ ④
else
set (h andles .figur e1,'pos ' ,[Curr entF igur eP os (1) Curr entF igur eP os (2) 739 ... ▶ ⑤
Curr entF igur eP os (4)])
% set (han dles .figur e1,' pos ' ,Curr entF igur eP os ) ▶ ⑥
set (h ,' strin g ' ,'Les s < < ' ) ▶ ⑦
end ;
% % % % % % % % % % % % % % % % % % t est .m % % % % % % % % % % % % % % % % % % % % % % %

우선, ①번 line과 같이 현재 figur e object의 크기를 Curr entF igur eP os에 저장한다.
그리고, t og glebutt on이 눌려 지면, figur e의 폭이 작아지고, togglebutt on이 r elea se되면, 다
시 원래의 figur e 크기로 돌아가도록 만들 것이다.
그러므로, t og glebutt on이 눌린 경우에는 v alue가 1 이라고 하였으므로, t ogglebutton이 눌
리면, g et (h ,'v alu e ' )는 1 을 반환하여 참 (tru e )이 된다. 이때에는 figur e의 폭만 바꾸어 줄
것이므로, ③번 line과 같이 codin g하면 된다. 그리고, togglebutt on에 M ore > > 과 같은 문자
열을 첨가해 주면 된다.
그러나, 만일, t og glebutt on이 r elea s e 상태라면, get (h ,'v alue ' )는 0 을 반환할 것이므로, ⑤
번 lin e과 같이 원래 figur e의 크기로 조정해 주면 된다. 그리고, L e s s < < 문자열을
t ogglebutton에 첨가해 주면 된다.
그러나, 만일, ⑤번 lin e대신에 ⑥번 lin e과 같이 coding하면 figur e의 원래 크기로 되돌아가
지 못한다.
그 이유는 무엇일까?
만일, 독자 중에서 정확한 대답을 할 수 있다면, m atlab의 w o rk s pa c e 에 대한 개념을 재대
로 이해하고 있는 것이다.
이 문제에 대한 대답은 독자 여러분들에게 맡기도록 하겠다.

t ogglebutton에 대한 coding이 끝났으면, 저장하고, t est .m 함수를 사용하여 실험해 보자.

지금까지 여러분은 m atlab에서 제공되는 모든 Uicontr ol compon ent들에 대해서 살펴보았다.


아직, GUIDem o.m 함수에는 좀 더 다듬어야 하는 곳들이 많이 남아 있지만, 여러분들이 우
선, 알아두어야 할 것은 지금까지의 내용을 한 번 읽어보고, m atlab의 GUI pr ogr am m in g 기
법을 모두 익혔다고 생각하면 안 된다.

- 52 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법

왜냐하면, 완성도 있는 GUI pr ogr am m in g을 하기 위해서는 uicontr ol, uim enu ,


uicontex tm enu에 대한 각각의 com pon ent들과 그에 따른 pr opertynam e/ pr opertyv alu e,
m atlab w ork spa ce의 개념, 그리고, 관련 함수들의 유효적 절 한 사용법을 모두 익혀야 하기
때문이다.
결국, 계속해서 m atlab으로 GUI pr ogr am 을 작성하면서 codin g에 친숙해 지는 것만이 자신
있는 GUI pr ogr am 을 만들 수 있는 길이다. 그리고, 이번에 GUI pr ogram을 재대로 배우면,
이후에 SIM ULIN K를 m atlab의 GUI와 연결시킬 때 많은 도움이 될 것이다.
또한, Visu al C ++로 GUI pr ogr am m in g을 할 때 사용하는 handle의 개념과 m atlab의 GUI
com ponent에서 사용하는 h andle의 개념은 같으므로, Visual C++를 배울 때도 많은 도움이
될 것이다.

이제, [그림 1- 41]과 같은 T o o ltip의 기능을 사용하는 방법을 살펴보자.

[그림 1- 4 1] To o ltip 기능.

t ooltip이란, m ou s e pointer를 일정한 영역에 놓았을 때, [그림 1- 41]과 같이 노란색의 네모


상자에 짧은 도움말을 잠시 표시해 주는 기능을 말한다.
t ooltip 기능을 사용하는 방법은 의외로 매우 간단하다.
즉, [그림 1- 41]은 2개의 editbox를 감싸고 있는 fr am e com ponent에 m ou s e point er가 놓이
면, tooltip이 나타나도록 만든 것이다.
이것은 fr am e com pon ent를 [그림 1- 42]와 같이 guide함수의 lay out edit or상에서 선택하고,
P roperty In spect or를 호출하여 t ooltip pr oprtyn am e에 도움말을 작성해 주면 된다.

- 53 -
1. Uicontrol Object의 GUI요소 사용 방법

[그림 1- 42 ] to o ltip 기능을 사용하는 방법.

그런데, 만약, M ark er type을 A st erisk로 설정한 경우에는 M arker F a ce Color가 아무런 의
미도 없게 된다.
왜냐하면, A st erisk는 face (임의의 폐공간)가 없기 때문이다.
결국, A st erisk를 선택하면, M arker F a ce Color를 u s er가 선택할 수 없도록 ListB ox 를 비활
성화 해 주어야 한다.
이처럼, 임의의 uicontr ol, uim enu , uicontextm enu 각각의 it em 을 비활성화해 주기위해서는
e n a ble pr opertyn am e을 사용하여야 한다.
enable pr opertynam e에는 다음과 같이 3가지 성질이 있다.

1) On : GUI com pon ent가 정상적으로 작동한다.(default )


2) In activ e : GUI com pon ent가 정상적인 모습을 가지지만, 작동은 하지 않는다.
3) Off : GUI compon ent가 비활성화 모양(gr ay ed out )을 가지며, 작동하지 않는다.

여기서, 주의 할 것은 en able의 In activ e propertyv alue는 uicontrol com pon ent에 대해서만
유효하다.

예를 들면, t est .m 함수의 맨 앞에 앞에서와 같이 global handles를 설정하고, t est .m 함수를


실행해 보자.
이때, listbox의 h andle v alue는 L sitM arkF ace이므로 다음과 같이 en able pr opertynam e을
사용할 수 있다.

> > t est


> > global h andle s
> > set (han dles .LsitM arkF a ce,' en able ' ,' off ' )

- 54 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법

위와 같이 명령하면, Listb ox 가 [그림 1- 43]과 같이 비활성화 된 것을 볼 수 있다.

[그림 1- 48 ] Ena b le Off 의 경우.

즉, [그림 1- 48]과 같이 GUI com ponent가 비활성화되면, m ou se로 click하여도 아무런 작동


을 하지 않는다.
[그림 1- 48]의 경우, listbox 의 비활성화가 한눈에 확연히 보이지 않으므로, Listbox의 위에
있는 M arker F ace Color " 문자열도 listbox 와 함께 비활성화 되도록 설정해 보자.
[그림 1- 49]와 같이 guide 함수를 사용하여 M arker F ace Color " 문자열의 han dle v alu e를
L sitM arkF aceT x t으로 설정하고, 저장한다.

[그림 1- 49 ] Ma rke r Fa c e Co lo r"의 ha nd le va lue 를 Ls it Ma rkFa c eTxt으로 설정

- 55 -
1. Uicontrol Object의 GUI요소 사용 방법

다음과 같이 명령하면, [그림 1- 50]과 같이 M arker F ace Color " 문자열이 비활성화 된 것
을 볼 수 있다.

[그림 1- 50 ] e na ble o ff의 효과.

이제, A st erisk r adiobutt on을 click하면, Listbox 와 M arker F ace Color " 문자열이 모두 비
활성화 되도록 설정해 보자.
그러기 위해서는 A sterisk의 callback함수인 AM arkR d_Callback에 다음과 같이 listbox 를 비
활성해 해 주는 r outine을 첨가해 주면 된다.

set (han dles .L sitM arkF ace,' enable ' ,' off ' )
set (han dles .L sitM arkF aceT x t ,' enable ' ,' off ' )

이제, t est .m 함수를 실행 해 보자.

> > t est

그리고, A st erisk r adiobutton을 click해 보면, listb ox 와 M ark er F ace Color " 문자열이 모두
비활성화 된 것을 볼 수 있을 것이다.
그러나, 다시 다른 compon ent를 click하면, 계속해서 listbox와 문자열들이 모두 비활성화 된
상태로 남아 있는 것을 볼 수 있다.
그렇다면, 어떻게 해야, 다른 com pon ent를 click할 때, listbox와 해당 문자열을 다시 activ e
state로 만들 수 있을 까?
이 문제를 쉽게 해결할 수 있다면, 이제, 여러분은 m atlab의 guide함수를 사용한 GUI
m echanism 을 모두 배웠다고 보아도 된다.

- 56 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법

A st erisk r adiobutton을 click한 뒤에, 다시, 임의의 다른 compon ent를 click하면, te st .m 함수


가 다시 재귀 호출되며, 이때에는 t est ('임의의 Callback 함수 ' ,gcb o,[],guidat a (g cbo))과 같이
입력 매개변수가 사용된다.
그러므로, te st .m 함수는 다음과 같은 부분을 수행하게 된다.

%%%%%%%%%%%%%%%%% te st .m %%%%%%%%%%%%%%%%%%%%%%
elseif ischar (v ar ar gin {1}) % INVOKE NAM ED SUBF UN CT ION OR CALLBA CK

try
[v ar ar g out {1:n ar gout }] = fev al(v ar ar gin {:}); % F EVAL s w it chy ard ▶ ①
cat ch
disp (la st err );
en d

end
%%%%%%%%%%%%%%%%% te st .m %%%%%%%%%%%%%%%%%%%%%%

그러므로, ①번 line에 다음과 같이 code를 첨가해 주면 문제가 해결된다.

%%%%%%%%%%%%%%%%% te st .m %%%%%%%%%%%%%%%%%%%%%%
elseif ischar (v ar ar gin {1}) % INVOKE NAM ED SUBF UN CT ION OR CALLBA CK

try
han dles =guidata (gcbo);
if han dles .ListBox Off ==1 ▶ ①
h andle s .ListB ox Off =0; ▶ ②
s et (han dles .L sitM arkF ace,' en able ' ,' on ' )
s et (han dles .L sitM arkF aceT x t ,' enable ' ,' on ' )
guidata (gcbo,handles );
end ;
[v ar ar g out {1:n ar gout }] = fev al(v ar ar gin {:}); % F EVAL s w it chy ard
cat ch
disp (la st err );
en d
end
%%%%%%%%%%%%%%%%% te st .m %%%%%%%%%%%%%%%%%%%%%%

①번과 ②번 line에서 사용한 ListBox Off는 Listbox 의 현재 en able 상태를 나타내주는 f l a g


역활을 수행한다.

- 57 -
1. Uicontrol Object의 GUI요소 사용 방법

즉, 현재 A st erisk r adiobutt on을 click하였다면, A sterisk의 callback함수는 다음과 같이


ListBox Off을 h andle s의 field로 설정하고, 1 을 할당한다.
그리고, guidat a .m 함수를 사용하여 현재 figur e obj ect의 dat a 영역에 저장한다.

% ----------------- t est .m (AM arkRd_Callback Subfun ction ) ------------------


function v ararg out = AM arkR d_Callba ck (h , ev ent dat a , h andles , v ar ar gin )
% Stub for Callback of the uicontr ol han dles .A M arkRd.
Ch eck_hn ds =[han dles .DM arkRd han dles .CM arkRd h andles .AM arkRd];
E x Choice (3,Check_hnds )

s et (handles .Lin e_han dle,'m arker ' ,' *' )


s et (handles .L sitM arkF ace,' en able ' ,' off ' )
s et (handles .L sitM arkF aceT xt ,' en able ' ,' off ' )
h andles .ListBox Off =1; ▶ ③
guidata (h ,h andle s ); ▶ ④
% ----------------- t est .m (AM arkRd_Callback Subfun ction ) ------------------

그리고, 앞에서 언급한 ①번과 ②번 line에서 사용하면 된다.


마지막으로, t est .m 함수의 초기화 r outin e에 handles .ListB ox Off=0;을 다음과 같이 첨가 해주
면 된다.

% ---------------------- test .m (초기화 Routin e ) ---------------------------


if n ar gin == 0 % LAUNCH GUI
fig = openfig (m filenam e,'n ew ' );
% U s e sy st em color s chem e for figur e :
set (fig ,' Color ' ,get (0,' defaultUicontr olBackgr oun dColor ' ));
% Gen er at e a structur e of h andle s to pa s s to callback s , and st or e it .
handles = guihan dles (fig );
x_str =get (han dles .XE dit ,' strin g ' );
y_str =g et (handles .YE dit ,' strin g ' );

x =str 2num (x _str );


y =ev al (y_str );
han dles .Line_h andle =fev al( 'plot ' ,x ,y );
Curr entLin eColor =g et (han dles .Lin e_han dle,' color ' );
set (h andles .R slider ,' v alu e ' ,Curr entLineColor (1));
set (h andles .RVal,' strin g ' ,num 2str (Curr entLineColor (1)));
set (h andles .Gslider ,'v alu e ' ,Curr entLin eColor (2));
set (h andles .GV al,' string ' ,num 2str (Curr entLin eColor (2)));
set (h andles .B slider ,' v alu e ' ,Curr entLineColor (3));

- 58 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법

set (h andles .BVal,' strin g ' ,num 2str (Curr entLineColor (3)));

set (h andles .T agDiam on dM enu ,' acceler at or ' ,' d ' );


set (h andles .T agcir cleM enu ,' acceler at or ' ,' e ' );
set (h andles .T agA steriskM enu ,' acceler at or ' ,'k ' );

han dles .ListBox Off =0; ▶ ⑤


guidat a (fig , han dles );

if n ar gout > 0
v ar ar gout {1} = fig ;
en d
% ---------------------- test .m (초기화 Routin e ) ---------------------------

지금까지 Uicontr ol Obj ect에 대해서 설명하였다.


이번에는 uim e n u obj e c t 를 사용하여 te st progr am 에 m enu를 첨가하는 방법에 대해서 알
아보자.
uim enu를 사용하여 m enu를 첨가하려는 경우, 우선, m atlab의 기본적으로 제공하는 m enu s
를 사용하려면, [그림 1- 51]과 같이 M e n ub ar pr opertyn am e을 fi g ure 로 잡아 주면 된다.

[그림 1- 5 1] Matla b 이 제공하는 기본 me nu .

[그림 1- 51]과 같이 M enubar를 figur e로 잡은 뒤에, 만일, m atlab이 제공하는 임의의 m enu
it em 을 지우고 싶다면, 다음과 같이 하면 된다.

- 59 -
1. Uicontrol Object의 GUI요소 사용 방법

> > t est


> > global h andle s
> > handles

han dles =

figur e1: 1
pu shbutt on 1: 247.0013
BSlidValT x t : 246.0013
GSlidV alT xt : 245.0013
RSlidValT x t : 219.0015
text 11: 218.0015

중간 생략

ax e s 1: 199.0015
figM enuT ools : 154.0018
figM enuIn s ert : 142.0018
figM enuView : 139.0018
figM enuE dit : 127.0020
figM enuT oolsBF DS : [179.0017 178.0017]
figM enuCam er aPA x : 169.0018

중간 생략

figM enuIn s ertZLabel: 145.0018 ▶ ①


figM enuIn s ertYLabel: 144.0018 ▶ ②
figM enuIn s ertXLabel: 143.0018 ▶ ③
figM enu Cam er aT oolbar : 141.0018

중간 생략

Line_h andle : 248.0005


ListBox Off : 0

m atlab이 기본적으로 제공하는 m enubar가 첨가된 test .m함수는 [그림 1- 52]와 같다.

7 편에서 계속 ...
(이어지는 내용 ☞ In sert m enu 중에서 XLabel m enu는 삭제하고, YLabel m enu의 label을
Y_Label로 바꾸어 보자.)

- 60 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법

이제, [그림 1- 52]의 In s ert m enu 중에서 XLabel m enu는 삭제하고, YLabel m enu의 label을
Y_Label로 바꾸어 보자.

우선, XLabel m enu를 삭제하기 위해서는 GUI com pon ent의 모습의 유・무를 결정하는
v i s ible propertynam e을 사용하면 된다.
즉, 다음과 같이 명령하여 보자.

> > set (handles.figMenuInsertXLabel,'visible ' ,' off ' )

이제, XLabel menu가 있던 위치를 살펴 보면 XLabel m enu가 없어 진 것을 알 수 있을 것이


다.

[그림 1- 52 ] 기본 me nuba r를 갖는 Fig ure Obje c t .

이번에는 다음과 같이 명령하여 보자.

> > set (handles.figMenuInsertYLabel,'label ' ,'&Y_Label ' )

위와 같이 명령하면, YLabel m enu가 Y_Label m enu로 label nam e이 바뀐 것을 알 수 있을


것이다.
여기서, 주의할 것은 &Y_Label과 같이 Y앞에 &을 붙이면, &의 오른쪽에 있는 문자에는 밑줄
이 그어진다.

그러나, F ile m enu에 있는 Pr efer en ces ..., P rint S etup ... m enu의 경우에는 해당 handle v alu e
가 주어지지 않았으므로 contr ol할 수 없다.

자 ! 이제, [그림 1- 53]과 같은 m enu s 기능을 t est .m 함수에 첨가해 보자.

- 61 -
1. Uicontrol Object의 GUI요소 사용 방법

[그림 1- 53 ] 첨가할 me nus .

[그림 1- 53]으로부터, 앞으로 배울 내용들을 정리하면 다음과 같다.


1) m enu를 설정하는 방법.
2) 다단계 m enu를 만드는 방법
3) m enu item 의 옆에 c h e c k s ig n (즉, ν)을 설정하는 방법.
▶ m enu it든에 대한 배타적 선택 방법.
4) 가속키(A cceler at or )를 사용하는 방법.
5) 기타.
▶ m enu it em 의 분리해 주는 s e pa rat or

우선, m enu를 설정하는 방법부터 살펴보자.


m enu s를 새롭게 만들어 주기 위해서는 [그림 1- 3]에서 M enu E dit or icon을 click해 주어야
한다.
그러면, [그림 1- 54]와 같이 M enu E dit or W indow 가 나타난다.

[그림 1- 54 ] Me nu Ed ito r Window .

- 62 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법

이제, [그림 1- 54]와 같이 N ew M enu icon을 click해 준다.


그러면, [그림 1- 55]와 같이 Pr operties gr oup box에 새롭게 만들 m enu에 대한 설정 it em s
가 나타난다.

[그림 1- 55 ] 첫 번째 me nu 설정방법.

[그림 1- 55]에서 설정한 Option s m enu는 F igur e Object에 나타나는 최상위 m enu이다.
즉, F igure object에 있는 F ile, E dit , View , In sert , ...과 동등한 계층의 m enu가 된다.

- 63 -
1. Uicontrol Object의 GUI요소 사용 방법

그러므로, 이제, Option s m enu에 [그림 1- 56]과 같이 SubM enu를 만들어 보자.

[그림 1- 56 ] te s t .m 의 me nus 구성도.

[그림 1- 56]에서 Diam on &d는 앞에서도 설명하였듯이, Diam ond와 같이 d밑에 밑줄을 그은
것을 의미한다.
우선, Option s m enu에 서브 m enu로 Grid Style m enu를 만들어 보자.
Option s m enu의 서브 m enu를 만들기 위해서는 우선, Option s m enu를 m ou s e로 click하여
선택하고, [그림 1- 55]에 보여 준 N e w M e n u It e m icon을 click한다.
그리고, Label에 Grid Style이라고 지정한다.
결국, 임의의 m enu에 대한 서브 m enu를 만들기 위해서는 우선, m ou s e로 서브 m enu를 만
들고자 하는 m enu를 선택하고, New M enu Item icon을 click하면 선택한 m enu의 서브
m enu를 만들어 나간다.
이제, 다시 한번 N ew M enu It em icon을 click하여 [그림 1- 57]과 같이 label에 Grid On을
지정하고, Callback에 grid를 on하도록 set (g ca ,'x grid ' ,' on ' ,'y grid ' ,' on ' )을 지정한다.

- 64 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법

[그림 1- 57 ] Me nu 에 Grid On 지정.

같은 방식으로, Grid Off 서브 m enu를 만들고, F igur e M enu에 대한 서브 m enu도 만들어


보자.
각각의 Label nam e에 따른 Callba ck 함수는 다음과 같다.
1) Grid On의 Callba ck 함수 : s et (gca ,'x grid ' ,' on ' ,'y grid ' ,' on ' )
2) Grid Off의 Callback 함수 : set (gca ,' x grid ' ,' off ' ,'y grid ' ,' off ' )
3) M enub ar N on e의 Callb ack 함수 : s et (g cf,'m enub ar ' ,'none ' )
4) M enub ar F igur e의 Callback 함수 : set (g cf,'m enubar ' ,'F igur e ' )

이제, 저장하고, te st .m 함수를 실행해 보자.


제대로 동작하는 것을 알 수 있을 것이다.

이번에는 Grid On/ Off에 대해서 Ch e c k S ig n (즉, ν)을 넣는 방법을 알아보자.


Uim enu object에 m enu를 배타적으로 선택하려는 경웅, Check Sign을 넣기 위해서는
uicontr ol에 해당하는 Ex Choice_m enu .m 함수를 사용해야 한다.

- 65 -
1. Uicontrol Object의 GUI요소 사용 방법

사용방법은 uicontr ol에서 사용한 Ex Choice .m 함수와 같다.

% ------------------------ Ex Choice_m enu .m -----------------------------


function Ex Choice_m enu (st at e, m enu_it em _hnds )
%
%Ex Ch oice_m enu .m 이 함수는 Uim enu Object에서 배타적 선택이
% 필요한 경우에 서브 함수로 사용하면 됩니다.
%
% 1999,1,21 By Lim Jong Su
%

% global m enu_it em _hn ds

it em _m ax =length (m enu_it em _hn ds );

if str cm p (g et (m enu_it em _hn ds (st at e ),' checked ' ) ,' on ' )


% str cm p.m 함수를 사용하고 있다는 데 주의 !
set (m enu_it em _hnds (st at e ),' checked ' ,' off ' );
else
set (m enu_it em _hnds (st at e ),' checked ' ,' on ' );
%다음 줄에 있는 명령어의 위치를 Ex Choice.m함수와 비교 !
set (m enu_it em _hnds ([1:(st at e - 1), (stat e +1):it em _m ax ]),' checked ' ,' off ' );
end
% ------------------------ Ex Choice_m enu .m -----------------------------

E x Choice_m enu .m 을 사용하여 배타적으로 Grid On/ Off에 대해서 Ch e c k S i g n (즉, ν )을


넣어 주기 위해서는 각각의 Grid On/ Off m enu를 m ou se로 click하면 수행되어야 하는
callback함수가 Ex Choice_m enu .m을 포함하여야 한다.
또한, Grid On/ Off를 수행해 주는 s et .m함수도 포함해야 한다.

일반적으로, uicontr ol com ponent에 대해서는 t est .m 함수 안에 해당 callback 함수의


pr ot otype을 m atlab이 자동으로 만들어 주지만, uim enu와 uicontex tm enu에 대해서는 만들
어 주지 않는다.
그러므로, uim enu와 uicontextm enu에 대한 callba ck 함수가 필요한 경우 다음과 같은 순서
로 사용자가 직접 만들어 주면 된다.
1) Callba ck 함수에 guide.m 함수에서 사용되는 함수의 pr ot otype을 지정한다.
즉, t est ('임의의 callback 함수 이름 , gcbo,[],guidat a (g cbo))
2) t est .m 함수에 임의의 callback 함수를 지정한다.
즉, fun ction 임의의 callback함수 이름(h , ev entdat a , han dles , v ar ar gin )

- 66 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법

우선, Grid On에 대한 Callba ck 함수를 지정하기 위해서, 이미 앞에서 지정한


s et (g ca ,'x grid ' ,' on ' ,'y grid ' ,' on ' )을 지우고, [그림 1- 58]과 같이

t est ('T agGridOn , g cbo,[],guidata (gcbo))

이라고 지정한다.

[그림 1- 58 ] uime nu의 c a llba c k 지정방법.

여기서, 주의할 것은 앞에서도 이미 언급하였듯이, T ag n am e과 handle n am e은 같으므로,


callback함수의 이름은 [그림 1- 58]과 같이 T a g nam e과 같게 잡았다.
물론, 반드시 위와 같은 규칙을 따르지 않아도 작동은 하지만, 가능하면, t ag이름과 han dle
의 이름, 그리고 callback함수의 이름은 동일하게 잡는 것이 좋다.
이제, t est .m 함수에 다음과 같이 서브함수를 새롭게 coding한다.

% ------------------- t est .m (T agGridOn_Callback ) -------------------------


function v ar ar g out = T ag GridOn_Callb ack (h , ev entdat a , han dles , v ar ar gin )
% Stub for Callback of the uim enu han dles .T ag GridOn .
s et (set (gca ,' x grid ' ,' on ' ,'y grid ' ,' on ' )
m enu_item_hnds =[handles .T ag GridOn h andles .T agGridOff]; ▶ ①
E x Choice_m enu (1 , m enu_it em _hnds ); ▶ ②
% ------------------- t est .m (T agGridOn_Callback ) -------------------------

- 67 -
1. Uicontrol Object의 GUI요소 사용 방법

①번과 ②번 lin e을 주석 처리하고, 저장한 뒤에, t est .m 함수를 실행하고, Grid On m enu를
m ou s e로 click해 보기 바란다.
그러면, callback 함수를 set (g ca ,'x grid ' ,' on ' ,'y grid ' ,' on ' )으로 놓은 것과 동일하게 동작할
것이다.
①번에서 T ag GridOff는 Grid Off에서 사용하는 T ag nam e이다.
그리고, ②번 lin e에 의해서 Grid On/ Off가 배타적으로 ch eck sign이 할당되게 된다.
이제, T a gGrid Off에 대해서도 [그림 1- 58]과 같이 callback함수를 지정하고, t est .m 함수에
다음과 같이 T agGridOff 서브 함수를 첨가 해 주자.

% ------------------- t est .m (T agGridOff_Callback ) -------------------------


function v ar ar g out = T ag GridOff_Callba ck (h , ev ent dat a , h andles , v ar ar gin )
% Stub for Callback of the uim enu han dles .T ag GridOn .
s et (set (gca ,' x grid ' ,' off ' ,'y grid ' ,' off ' )
m enu_item_hnds =[handles .T ag GridOn h andles .T agGridOff];
E x Choice_m enu (2 , m enu_it em _hnds ); ▶ ③
% ------------------- t est .m (T agGridOff_Callback ) -------------------------

②번에는 1 을 ③번에는 2 를 할당한데 주의하자.

그런데, ch eck sign이 처음 t est .m 함수가 실행될 때, 표시가 되지 않고 있다.


그러므로, 가능하면, t est .m 함수가 처음 실행 될 때, Grid Off m enu에 ch eck sign이 있도록
설정해 보자.
그러기 위해서는 te st .m 함수의 초기화 r outin e에 다음과 같이 codin g하면 된다.

s et (handles .T ag GridOff, ' ch ecked ' ,' on ' );

같은 방법으로 M enubar None과 M enubar F igur e m enu s도 배타적으로 check sign이 할당


되도록 해 보기 바란다.

이제, m enu item이 보다 진보적인 기능을 수행하도록 해 보자.


[그림 1- 56]과 같이 이번에 만들 m enu는 m arker의 type을 설정해 주는 기능을 수행한다.
그러나, 이 기능들은 이미, 3개의 r adiobutt on s가 수행하므로, 새롭게 만들 3개의 m enu s는
각각의 r adiobutt on과 연결시켜 주기만 하면 된다.

우선, [그림 1- 59]와 같이 3개의 m enu s를 [그림 1- 56]을 참고하여 만들어 보자.
각각에 대한 Lab el 이름과 T ag 이름, 그리고 Callback함수들은 [표 1- 4]와 같다.

- 68 -
1. Uicontr ol Obj ect의 GUI요소 사용 방법

Label 이름 T ag 이름 Callback 함수

Diam on&d DM arkRdM enu t est ( 'DM arkRd_Callback ' ,gcbo,[],guidata (g cbo))

Cir cl&e CM arkRdM enu t est ( ' CM arkRd_Callback ' ,g cbo,[],guidat a (gcb o))

A st eris&k AM arkRdM enu t est ( 'AM arkRd_Callback ' ,gcbo,[],guidata (g cbo))

[표 1- 4 ] La be l 이름, Ta g 이름, Ca llba c k 함수의 이름.

3개의 m enu에 대한 callb ack함수들을 보면, 모두 각각에 대응하는 Ra diobutton들의


callback함수를 부르고 있다.
즉, Diam ond m enu를 click하면, Diam on d r adiobuut on을 click하였을 때, 수행되는
DM arkRd_Callback함수가 호출되어 실행된다.

[그림 1- 59 ] Uime nu를 사용하여 Ma rke r Type 설정.

8 편에서 계속 ...
(이어지는 내용 ☞ DM arkRd_Callb ack함수)

- 69 -
1. Uicon trol Object의 GUI요소 사용 방법

이제, 앞에서 배운 것과 같이 3개의 m enu s에 대한 배타적 ch eck sig n을 부여하기 위해서


E x Ch oice_m enu fu n ction을 추가한다.
그러면, DM arkR d_Callb a ck함수는 다음과 같이 바뀐다.

- 70 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

% ---------------------- test .m (DM arkRd_Callb ack ) -----------------------


fu n ction v ararg ou t = DM arkR d_Callb a ck (h , ev ent dat a , h an dles , v ar ar gin )
% Stu b for Callb ack of th e u icontr ol h an dles .DM arkRd .
if str cm p (g et (g cb o,'T ag ' ),'DM arkR dM enu ' ) ▶ ①
set (h an dles .DM ark Rd ,' v alu e ' ,1) ▶ ②
en d ;
m en u_item _h n d s =[h an dles .DM arkR dM en u h an dle s .CM arkRdM en u ...
h an dles .A M ark RdM enu ]; ▶ ③
E x Ch oice_m enu (1, m enu _it em _h n d s ); ▶ ④

Ch eck_hn ds =[h an dles .DM arkRd h an dles .CM ark Rd h an dles .A M ark Rd];
E x Ch oice (1,Ch eck _h n d s )

s et (h an dles .Lin e_h an dle,'m ark er ' ,' diam on d ' )


% ---------------------- test .m (DM arkRd_Callb ack ) -----------------------

①번 lin e에서는 현재, m ou se로 click한 m enu 의 T ag n am e이 DM arkRdM enu 인지를 비교하
고 있다.
만일, m ou se로 click한 m enu 의 t ag n am e이 DM arkR dM enu 이라면, Diam on d r adiobutt on 을
m ou s e로 click한 것과 같은 효과를 주기 위해서 ②번 lin e과 같이 Diam on d r adiobu tt on의
h an dle v alu e인 h an dle.DM arkR d를 사용하여 v alu e 를 1 로 settin g하고 있다.
여기서 주의할 것은 R adiob utton과 ch eckb ox , 그리고, tog g leb utton 모두 m ou se로 click하
면, 해당 v a lu e 가 1 로 s ettin g 된다는 것이다.
그리고, m ou se로 click하지 않았으면, v a lu e 가 0 으로 settin g된다.
③번 lin e과 ④번 lin e은 앞에서 이미 언급하였듯이, 3개의 m en u를 배타적으로 ch eck sign 을
부여하기 위해서 첨가한 것이다.
같은 방식으로, Cir cle r adiobu tt on 과 A st erisk r adiobu tt on의 Callb ack함수에도 codin g 한 뒤
에 저장하고, 실행하면, M ark er T y pe m en u의 서브 m en u s와 3개의 r adiobu tt on 이 재대로
연결되어 작동하는 것을 볼 수 있을 것이다.

대부분, 사용하는 프로그램에 익숙해지면, GU I com pon en t를 m ou s e로 click하기 보다, 해당


m en u에 대한 가 속 키 (acceler at or )를 즐겨 사용하게 된다.
m atlab에서 가속키를 사용하는 방법은 대단히 간단하다.
그러나, 이미, 예약되어 있는 가속키 값이 있으므로, 이들 값들은 피해 주어야 한다.
이미 예약되어 있는 가속키 값들은 m atlab이 F igu r e Obj ect에 기본적으로 제공해 주는
m en u를 살펴보면 나타난다.

- 71 -
1. Uicon trol Object의 GUI요소 사용 방법

[그림 1- 60 ] File me nu

즉, [그림 1- 60]과 같이 F ile m enu 에서 N , O , W , S , P를 가속키 값으로 이미 사용하고 있는


것을 볼 수 있다.
그리고, Edit m enu에서는 X , C , V , A 를 가속키 값으로 이미 사용하고 있는 것을 볼 수 있을
것이다.
그러므로, 이들 문자를 제외한 나머지 문자를 가속키 값으로 사용 할 수 있다.
그리고, 가속키 값은 서브 m enu가 없는 m enu item에 대해서만 사용할 수 있다.

이제, 우리가 만들 가속키는 [그림 1- 61]과 같이 만들 것이다.

[그림 1- 6 1] 제작할 가속키 값들.

이들 가속키 값들은 test .m 함수가 처음 실행될 때, setting되어야 한다.


그러므로, 초기화 routin e에 다음과 같이 설정해 주면 된다.

- 72 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

% ---------------------- test .m 초기화 Routin e ----------------------------


fu n ction v ararg ou t = t est (v ar ar gin )
% T E ST A pplication M - file for te st .fig
% F IG = T E ST lau n ch test GUI.
% T E ST (' callb ack _n am e ' , ...) in v ok e th e n am ed callb a ck .
% La st M odified by GUIDE v 2.0 19 - Ju l- 2001 23 :40:02

if n ar gin == 0 % LA U N CH GUI
fig = open fig (m filen am e,'r eu se ' );
% U s e sy st em color s ch em e for fig ur e :
set (fig ,' Color ' ,g et (0,' defaultUicontr olBack gr oun dColor ' ));
% Gen er at e a stru ctur e of h an dle s to pa s s to callb ack s , an d st or e it .
h an dles = g uih an dles (fig );

중간 생략

set (h an dles .T ag GridOff, ' ch eck ed ' ,' on ' );


set (h an dles .T agM en ub arF ig ur e, ' ch eck ed ' ,' on ' );

set (h an dles .DM ark RdM enu ,' acceler at or ' ,' d ' ); ▶ ①
set (h an dles .CM arkR dM en u ,' a cceler ator ' ,' e ' ); ▶ ②
set (h an dles .A M ark RdM enu ,' acceler at or ' ,'k ' ); ▶ ③

h an dles .ListBox Off =0;

gu idat a (fig , h an dles );

if n ar g out > 0
v ar ar g out {1} = fig ;
en d

elseif isch ar (v ar ar gin {1}) % INV OKE NA M ED SUBF UN CT ION OR CA LLBA CK

try
h an dles =gu idat a (g cb o );
if h an dles .ListB ox Off ==1
h an dles .ListBox Off =0;
set (h an dle s .L sitM ark F ace,' en able ' ,' on ' )
set (h an dle s .L sitM ark F aceT x t ,' en able ' ,' on ' )
gu idat a (g cb o,h an dles );

- 73 -
1. Uicon trol Object의 GUI요소 사용 방법

en d ;
[v ar ar g ou t {1:n ar g out }] = fev al(v ar ar gin {:}); % F EV A L s w it chy ard
cat ch
disp (la st err );
en d

en d
% ---------------------- test .m 초기화 Routin e ----------------------------

①, ②, ③번 lin e으로부터 알 수 있듯이, 가속키는 u im en u object의 a c c e l e rat o r pr op erty


n am e을 사용하면 된다.
즉, 가속키를 부여하고자 원하는 uim enu object의 a cceler ator pr operty n am e에 가속키 값을
pr operty v alu e로 부여해 주면 된다.
위와 같이 codin g 한 뒤에 가속키 값이 제대로 실행되는 지 확인해 보기 바란다.

의외로 가속키를 사용하는 방법이 매우 간단하다는 것을 알 수 있다.


그런데, m atlab 만, 가속키를 사용하는 것이 간단한 것이 아니라, Visu al C ++를 사용하여 가
속키를 만드는 것도 r es ou rce w in dow 에서 m atlab과 비슷한 방법으로 설정만 해 주면 된다.

[그림 1- 62]와 같이 여러 개의 m enu s를 나타내는 경우에는 각각의 m en u의 특성에 맞게 분


리해 주는 것이 좋다.

[그림 1- 62 ] me nu s e pa rato r.

[그림 1- 62]와 같이 S epar at or를 사용하기 위해서는 [그림 1- 63]과 같이 m enu edit or에서
S e p ara t o r a b o v e th i s it e m 을 click하면, 현재 설정하는 m en u의 위에 [그림 1- 62]와 같이
s epar at or가 만들어진다.

- 74 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

[그림 1- 63 ] Matla b Me nu s e pa rato r의 사용 방법.

이제, U icont ex tm en u를 만드는 방법을 살펴보도록 하자.


U icont ex tm en u는 임의의 Obj ect에서 m ou se의 오 른 쪽 버튼을 click하였을 때, 나타나는
p opup m en u를 의미한다. 그러나, W in dow s sy st em 과 U NIX sy st em 에서만 m ou se의 오른쪽
버튼에 의해서 uicon t ex tm en u가 나타나고, M acin t osh sy st em 에서는 Ct rl k ey 를 누른 상태
에서 m ou s e의 오른쪽 버튼을 click 해 주어야 나타난다.
보통, M acint osh sy stem 에서는 uicon tex tm enu 라고 부르지 않고, e x t e n d e d c lic k 이라고 부
른다.

어쨌든, 이번에 학습할 u icont ex tm enu 는 [그림 1- 64]와 같이 A x es obj ect에서 m ou se의 오
른쪽 버튼을 click 하였을 때 나타나며, m ark er ty pe과 lin e sty le을 조정해 주는 역할을 수행
한다.

u icon tex tm enu 는 그 이름과 같이 uim enu 의 확장판이라고 보면 된다.


그러므로, [그림 1- 64]와 같이 m enu s로 구성되며, uim enu 에서 사용한 ch eck sig n과
s epar at or도 동일하게 사용된다.

- 75 -
1. Uicon trol Object의 GUI요소 사용 방법

[그림 1- 64 ] uic o ntextme nu의 사용 방법.

어쨌든, u icont ex tm en u를 사용하기 위해서는 우선, M en u E dit or w in dow 에서 [그림 1- 65]와


같이 con tex t M enu s t ab을 click한다.

그리고, m en u s를 설정하던 방법대로 각각의 m enu 를 구성해 나간다.


우선, N ew Con tex t M enu icon을 click한다.
그리고, [그림 1- 66]과 같이 각각의 m en u it em 들을 Pr op erties gr oup b ox 안에서 uim enu 에
서 m enu 를 설정하던 방법대로 설정해 나간다.

[그림 1- 66 ] Uic o nte xtme nu의 me nu설정 방법.

- 76 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

[그림 1- 67]은 [그림 1- 64]에서 보여준 u icon tex tm enu 의 기능을 수행하도록 구성해 본 것이
다.

[그림 1- 67 ] te s t .m 함수의 uic o ntextme nu 설정.

각각의 m en u에 대한 구성은 [표 1- 5]와 같다.

Label : T ag : Callb a c k :
Diam on &d T ag DiaCon M enu t est ( 'DM arkRd_Callb ack ' ,g cb o,[],g uidata (g cb o)) off
Cir cl&e , T ag Cir Con M en u t est ( ' CM arkRd_Callb ack ' ,g cb o,[],g uidat a (g cb o)) off
A st eris &k , T ag A st Con M en u t est ( 'A M arkRd_Callb ack ' ,g cb o,[],g uidata (g cb o)) off
Da sh ed Lin e T ag DCon M en u t est ( 'DhLin eChk _Callb ack ' ,g cb o,[],gu idat a (g cb o )) on
Dott ed Lin e T ag Dt Con M enu t est ( 'DtLin eCh k_Callb ack ' ,g cb o,[],g uidata (g cb o)) off
Da sh - D ot
T ag DDConM en u t est ( 'DDLin eChk_Callb a ck ' ,g cb o,[],gu idat a (g cb o )) off
Lin e
Default , T ag Defau ltM enu t est ( 'T ag Play Butt on _Callb ack ' ,g cb o,[],g uidat a (g cb o)) on

[표 1- 5 ] Uic o ntextme nu 구성표.

[표 1- 5]에서 o n/ o f f는 S eparator ab ov e this item 의 ch eck db・무를 나타낸다.

- 77 -
1. Uicon trol Object의 GUI요소 사용 방법

이제, [표 1- 5]와 같이 [그림 1- 67]을 구성하였으면, 사용할 uicont ex tm en u의 준비는 모두


한 셈이다.
[그림 1- 67]과 같이 u icon tex tm enu 를 구성하였으면, 이제, 어느 GUI com pon en t에서 m ou s e
의 오른쪽 버튼을 click하였을 때, uicont ex tm en u가 나타나게 할지, 대상 GUI com pon en t를
선택하여야 한다.

이 예제에서는 [그림 1- 64]와 같이 [그림 1- 67]의 u icont ex tm en u를 ax e s ob j e c t 에 연결할


계획이다.
ax es object에 uicon tex tm enu 를 연결하기 위해서는 우선, ax es object의 Pr op erty In sp ect or
를 gu ide함수에서 [그림 1- 68]과 같이 활성화한다.

[그림 1- 68 ] Uic o ntextme nu를 GUI c o mpo ne nt 에 연결하는 방법.

그리고, [그림 1- 68]과 같이 UICon tex tM en u pr operty n am e 옆에 있는 icon 을 click하여 나


타나는 p opu pm en u에서 방금 만든 Lin eT y pe s를 선택한다.
결국, [그림 1- 65]의 UIcont ex tm en u w in dow 에서 만든 모든 uicon t ex tm en u s는 [그림 1- 68]
과 같이 임의의 그래픽 object의 uicon t ex tm en u property n am e에 등록되므로, 쉽게
u icon tex tm enu 를 임의의 그래픽 object에 연결할 수 있다.
[그림 1- 68]과 같이 Lin eT y pes를 선택하고, 저장한 뒤에 t est .m 함수를 실행해 보자. 그리고,
ax es object에서 m ou se의 오른쪽 버튼을 click하여 uicon t ex tm en u가 나타나는 지 확인해 보
기 바란다.

그러나, uicon t ex tm en u를 구성하는 각각의 m enu 가 배타적으로 선택되지 않는 것을 알 수


있다.
그러므로, U im en u에서 사용한 E x Ch oice_m enu .m 함수를 사용하여 배타적으로 선택되도록
만들어 보자.

- 78 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

그런데, 여기서, [표 1- 5]에서 만든 d e f au lt m en u의 기능이 무엇인지 알아 볼 필요가 있다.


defau lt m en u는 lin e ty p es를 사용자가 임의로 설정한 뒤에, 다시, te st .m 함수를 처음 실행하
였을 때의 lin e ty pe으로 바꾸어 주는 함수이다.
그러므로, 이 함수는 Play 버튼과 연결된다.
P lay 버튼은 x , y editb ox 에서 설정한 값들을 근거로 plot .m 함수를 사용하여 plottin g해 주는
기능을 수행한다.

어쨌든, Ex Ch oice_m enu .m 함수를 사용하여 u icont ex tm en u에 배타적 선택의 기능을 부여하
기 위해서는 다음과 같이 codin g해 주면 된다.

% - - - - - - - - - - - - - - - - - - - - t est .m (DM arkR d_Callb a ck ) - - - - - - - - - - - - - - - - - - - - - - - - -


fu n ction v ararg ou t = DM arkR d_Callb a ck (h , ev ent dat a , h an dles , v ar ar gin )
% Stu b for Callb ack of th e u icontr ol h an dles .DM arkRd .
if (str cm p (g et (g cb o,'T ag ' ),' DM arkRdM en u ' ) | str cm p (g et (g cb o,'T a g ' ),'T ag DiaCon M enu ' ))
set (h an dles .DM ark Rd ,' v alu e ' ,1)
en d ;
ConM en u_item _h n d s =[h an dles .T ag DiaCon M enu h an dles .T ag Cir ConM enu ...
h an dles .T agA stConM en u h an dle s .T a gDefau ltM en u ]; ▶ ①
E x Ch oice_m enu (1, ConM enu _it em _h n d s ); ▶ ②

m en u_item _h n d s =[h an dles .DM arkR dM en u h an dle s .CM arkRdM en u h an dles .A M arkR dM en u ];
E x Ch oice_m enu (1, m enu _it em _h n d s );

Ch eck_hn ds =[h an dles .DM arkRd h an dles .CM ark Rd h an dles .A M ark Rd];
E x Ch oice (1,Ch eck _h n d s )

s et (h an dles .Lin e_h an dle,'m ark er ' ,' diam on d ' )


% - - - - - - - - - - - - - - - - - - - - t est .m (DM arkR d_Callb a ck ) -------------------------

위의 code에서 if 문에 str cm p (g et (g cb o,'T ag ' ),'T a gDiaCon M enu ' )을 더 추가 한 이유는 앞


에서 배운 uim enu 에서 if 문을 첨가한 이유와 잘 연결해서 생각해 보면 이해가 되리라고 생
각한다.
즉, 현재 m ou se로 click한 GU I com pon ent의 T ag n am e이 DM arkRdM en u이거나,
T agDiaConM en u인 경우에는 h an dle s .DM arkR d의 pr operty v alu e를 1 로 settin g 해 준다.
결국, DM arkR dM enu 또는, T ag Dia ConM enu 을 m ou se로 click하면, Diam on d R adiob utton이
m ou s e로 click한 상태(즉, v alu e는 1 인 상태)를 갖게 해 준다.
①번과 ②번 lin e은 uicon tex tm enu 를 배타적으로 선택하기 위한 문장으로 uim enu 에서 사용
한 방법과 동일하다.

같은 방법으로, CM arkRd_Callb ack과 A M arkR d_Callb ack를 codin g해 주면 된다.


그리고, Dh Lin eCh k_Callb ack은 다음과 같이 code를 첨가 해 주면 된다.

- 79 -
1. Uicon trol Object의 GUI요소 사용 방법

% - - - - - - - - - - - - - - - - - - - - t est .m (Dh Lin eCh k_Callb ack ) - - - - - - - - - - - - - - - - - - - - - - - -


fu n ction v ararg ou t = Dh Lin eCh k_Callb ack (h , ev en t dat a , h an dles , v ararg in )
% Stu b for Callb ack of th e u icontr ol h an dles .DhLin eChk .
if str cm p (g et (g cb o,'T ag ' ),'T a gDConM en u ' )
set (h an dles .Dh Lin eChk ,'v alu e ' ,1)
en d ;
ConM en u_item _h n d s =[h an dles .T ag DCon M en u h an dles .T ag Dt ConM enu ...
h an dles .T agDD ConM enu h an dles .T agDefau ltM en u ];
E x Ch oice_m enu (1, ConM enu _it em _h n d s );

Ch eck_hn ds =[h an dles .DhLin eChk h an dle s .DtLin eChk h an dles .DDLin eChk ];
E x Ch oice (1,Ch eck _h n d s )
s et (h an dles .Lin e_h an dle,'Lin eSty le ' ,' - - ' )
% - - - - - - - - - - - - - - - - - - - - t est .m (Dh Lin eCh k_Callb ack ) - - - - - - - - - - - - - - - - - - - - - - - -

굳이 설명하지 않아도 이해 할 수 있을 것이라고 본다.


같은 방식으로, DtLin eCh k_Callb ack과 DDLin eCh k_Callb ack에도 code를 첨가 해주기 바란
다.

마지막으로, P lay bu tt on에 대한 callb ack함수의 처리를 생각해 보자.


P lay 버튼은 다음과 같이 2가지 기능을 수행하도록 만들 것이다.
1) x , y (x )의 editb ox 에 값들을 입력한 뒤에 Play b utton을 click하면, 해당 x , y (x )의 값에
근거하여 plot .m 함수로 plottin g해 주는 기능.
2) Play b utton을 click 하면, 기존에 선택한 모든 Lin e T y p es를 해지하고, defau lt lin e
ty pe으로 바꾸어 주는 기능.

우선, x , y (x )에 입력한 값들에 근거하여 plot .m 함수를 사용하여 plottin g하도록 play butt on
의 callb a ck함수를 codin g 해 보자.
g uide.m 함수의 Pr operty In spect or를 사용하여 P lay bu tt on의 Callb ack함수 pr ot oty pe을
t est .m 함수에 추가해 준다.
이때, P lay bu tt on의 T ag n am e은 T a g P l ay B u t t o n 으로 설정하자.

% - - - - - - - - - - - - - - - - - - - t est .m (T agPlay Bu tton_Callb ack ) - - - - - - - - - - - - - - - - - - - - - -


fu n ction v ararg ou t = T a gPlay Bu tt on_Callb ack (h , ev ent data , h an dles , v ar ar gin )
% Stu b for Callb ack of th e u icontr ol h an dles .T agP lay Button .
x _str =g et (h an dles .XE dit Str ,' strin g ' );
y _str =g et (h an dles .YE dit Str ,' strin g ' );

x =str 2nu m (x _str );


y =ev al(y _str );
h an dles .Lin e_h an dle =fev al (' plot ' ,x ,y );
Cu rrentLin eColor =g et (h an dles .Lin e_h an dle ,' color ' );
s et (h an dles .RSlid ,'v alu e ' ,Cu rrentLin eColor (1));

- 80 -
1. Uicon tr ol Obj ect의 GUI요소 사용 방법

s et (h an dles .GSlid ,' v alu e ' ,Curr en tLin eColor (2));


s et (h an dles .BSlid ,'v alu e ' ,Cu rrentLin eColor (3 ));
g uidata (h ,h an dle s );
% - - - - - - - - - - - - - - - - - - - t est .m (T agPlay Bu tton_Callb ack ) ----------------------

결국, t est .m 함수의 초기화 r ou tin e을 설정할 때 사용한 code들임을 알 수 있다.

이제, Play butt on 을 click 하면, 기존에 선택한 모든 Lin e T y pes를 해지하고, default lin e
ty pe으로 바꾸어 주는 기능을 추가해 주면 code는 다음과 같이 될 것이다.

% - - - - - - - - - - - - - - - - - - - t est .m (T agPlay Bu tton_Callb ack ) - - - - - - - - - - - - - - - - - - - - - -


fu n ction v ararg ou t = T a gPlay Bu tt on_Callb ack (h , ev ent data , h an dles , v ar ar gin )
% Stu b for Callb ack of th e u icontr ol h an dles .T agP lay Button .
x _str =g et (h an dles .XE dit Str ,' strin g ' );
y _str =g et (h an dles .YE dit Str ,' strin g ' );

x =str 2nu m (x _str );


y =ev al(y _str );
h an dles .Lin e_h an dle =fev al (' plot ' ,x ,y );
Cu rrentLin eColor =g et (h an dles .Lin e_h an dle ,' color ' );
s et (h an dles .RSlid ,'v alu e ' ,Cu rrentLin eColor (1));
s et (h an dles .GSlid ,' v alu e ' ,Curr en tLin eColor (2));
s et (h an dles .BSlid ,'v alu e ' ,Cu rrentLin eColor (3 ));
g uidata (h ,h an dle s );

ConM en u_item _h n d s =[h an dles .T ag DiaCon M enu h an dles .T ag Cir ConM enu ...
h an dles .T agA stConM en u h an dle s .T a gDConM en u ...
h an dles .T agDt Con M en u h an dles .T ag DDCon M en u h an dles .T ag DefaultM enu ];
E x Ch oice_m enu (7, ConM enu _it em _h n d s ); ▶ ①

m en u_item _h n d s =[h an dles .DM arkR dM en u h an dle s .CM arkRdM en u h an dles .A M arkR dM en u ];
s et (m en u_it em _hn ds ,' ch eck ed ' ,' off ' ); ▶ ②

Ch eck_hn ds =[h an dles .DM arkRd h an dles .CM ark Rd h an dles .A M ark Rd];
s et (Ch eck_hn d s ,'v alu e ' ,0) ▶ ③

Ch eck_hn ds =[h an dles .DhLin eChk h an dle s .DtLin eChk h an dles .DDLin eChk ];
s et (Ch eck_hn d s ,'v alu e ' ,0) ▶ ④
% - - - - - - - - - - - - - - - - - - - t est .m (T agPlay Bu tton_Callb ack ) - - - - - - - - - - - - - - - - - - - - - -

①번 lin e은 기존에 선택한 모든 uicon tex tm enu 의 ch eck sig n을 해지하고, default m en u에
ch eck sig n을 부여하는 기능에 대한 설명이다.

- 81 -
1. Uicon trol Object의 GUI요소 사용 방법

②번, ③번, ④번 lin e 각각은 m enu 와 r adiobu tt on s , 그리고 ch eckb ox 의 선택 상황을 모두


해지해 주는 r outin e이다.

이 것 으 로 GU I pro g ram m in g 에 대 한 설 명 을 마 친 다 .

- 82 -

You might also like