프날 오토핫키 강좌  v2

⚠ 이 강좌는 오토핫키 v2를 다룹니다

지금 보시는 강좌는 과거 오랜 시간동안 알려진 오토핫키(v1.1)의 차세대 버전인 오토핫키 v2를 다루고 있습니다.
만약 구버전인 '오토핫키 v1.1'의 강좌를 찾으신다면 프날 오토핫키 강좌(https://pnal.kr)를 봐주시면 되지만, 새로 오토핫키를 배우신다면 v2 버전을 배우시는 것을 강력히 추천드립니다.

70. 창 생성하기


먼저 화면에 눈에 보이는 '창'을 만들어보겠습니다.

Gui 객체 생성

오토핫키에서 배열과 맵이 객체이고 생성자(Array(),Map())로 생성했던 것처럼, GUI 창을 만드는 것 역시 Gui 객체를 만들어서 변수에 담는 것부터 시작합니다. 우선 Gui 객체의 생성자인 Gui()에 대해 배워보겠습니다.

Gui([Options, Title, EventObj])
GUI 생성자의 원형

셋 모두 선택 매개변수이기 때문에 아래와 같이 전부 생략해도 정상 작동합니다.

1MyGui := Gui()
인수를 모두 생략한 MyGui 인스턴스 생성

Options 매개변수를 통해 만들 창의 성질을 결정할 수 있습니다. 적용할 옵션은 +옵션과 같이, 제거할 옵션은 -옵션과 같이 아래 표를 보고 문자열로 적어주면 됩니다.

성질설명
AlwaysOnTop창을 다른 창보다 항상 위에 있도록 함.
Caption (기본 적용됨)창의 테두리(닫기 버튼이 있는 영역)를 생성함.
Disabled창을 '사용 안함' 상태로 만듦(=모든 컨트롤의 상호작용을 막음).
MaximizeBox최대화 버튼을 추가함.
MinimizeBox (기본 적용됨)최소화 버튼을 추가함.
MinSize창의 최소 크기를 제한함. +MinSize너비x높이와 같이 사용.
MaxSize창의 최대 크기를 제한함. +MaxSize너비x높이와 같이 사용.
Resize창의 테두리를 잡고 드래그하여 크기 조절을 가능하게 함.
자주 쓰이는 옵션만 적어두었습니다.

여러 옵션을 적용할 경우 각 옵션 사이를 띄어서 적어줍니다. 예를 들어서, 다른 창보다 항상 위에 있으며 크기 조절이 가능한 창은 아래와 같이 만들 수 있습니다.

1MyGui := Gui("+AlwaysOnTop +Resize")
두 옵션을 추가한 예시

기본 적용된 'MinimizeBox' 옵션만 제거된 창을 만드려면 아래와 같이 적겠죠.

1MyGui := Gui("-MinimizeBox")
하나의 옵션을 제거한 예시

이어서 Title 매개변수를 살펴보겠습니다. 이 매개변수는 창의 상단에 표시되는 제목을 결정합니다. 47강에서 창의 구조에 대해 설명했죠? 이곳에 문자열로 적어준 인수에 따라 창의 제목이 달라집니다. 기본 값은 프로그램 파일의 이름과 같습니다.

1MyGui := Gui(, "내 Gui 프로그램")
제목을 설정한 예시

위와 같이 Title 매개변수에 전달해주는 인수로 문자열을 전송함으로써 창의 제목을 설정해줄 수 있습니다. 이 예시에선 첫 번째 매개변수(Options)에 아무 인수를 전달하지 않았으므로 생략하여 콤마(,)가 먼저 왔다는 것을 유의하세요. 첫 번째 인수는 비어있고, 두 번째 인수를 전달해준 것입니다!

EventObj 매개변수는 중요하지 않으므로 설명하지 않겠습니다.

Gui 객체를 화면에 표시하기

Gui 객체를 만든다고 해서 화면에 바로 창이 나타나는 것은 아닙니다. 객체는 멤버 변수와 멤버 함수, 즉 속성과 메서드를 가지고 있다고 했으므로, 우리가 생성한 Gui 객체 또한 이를 가지고 있습니다. 그중에는 "창을 화면에 표시하라"를 수행하는 Show() 메서드도 있습니다.

1MyGui := Gui()
2MyGui.Show()
MyGui 창을 화면에 표시

위 예시와 같이 Show() 메서드를 이용하여 생성한 창을 화면에 띄울 수 있습니다. 앞서 배운 내용을 응용하여 아래와 같이 적으면 제목이 '오토핫키 연습용'인 창이 생성되겠죠?

1MyGui := Gui(, "오토핫키 연습용")
2MyGui.Show()
MyGui 창(제목: 오토핫키 연습용)을 화면에 표시

Gui.Show()의 원형은 아래와 같습니다.

MyGui.Show([Options])
Gui.Show() 함수의 원형

선택 매개변수 Options 딱 하나가 있죠? 이는 창을 표시하는 옵션에 관한 것으로, Gui 객체 생성자의 Options 매개변수와는 다릅니다. 창 자체의 성질이 아닌, 화면에 창을 어떻게 표시할지 정해주는 옵션을 아래 표를 보고 문자열로 적어주시면 됩니다.

성질설명
x창이 나타날 가로 위치(x좌표)를 설정. x좌표와 같이 사용.
y창이 나타날 세로 위치(y좌표)를 설정. y좌표와 같이 사용.
w창이 나타날 너비(Width)를 설정. w너비와 같이 사용.
h창이 나타날 높이(Height)를 설정. h높이와 같이 사용.
Maximize창을 최대화 상태로 표시
Minimize창을 최소화 상태로 표시
자주 쓰이는 옵션만 적어두었습니다.

x, y 옵션을 생략하여 창이 화면 정중앙에 나타나도록 할 수 있습니다. 또한 w, h를 생략하면 창 내부의 컨트롤에 따라 자동으로 창의 크기를 계산하여 표시하게 됩니다.

각 옵션은 띄워서 적어주며, 관례적으로 x, y, w, h 옵션은 소문자로 적어줍니다. MaximizeMinimize는 상식적으로 동시에 적을 수 없다는 점도 아시겠죠?

실습

1. 원하는 창 만들기

제목이 '새 GUI 프로그램'이고 너비가 300px, 높이가 300px인 창을 만들어서 화면에 띄워보겠습니다.

1NewGui := Gui(, "새 GUI 프로그램")
2NewGui.Show("w300 h300")
예제 1. 새 창 생성

제가 글재주가 없어 설명이 어려워서 그렇지, 막상 실습을 해보면 쉽죠? 원하는 성질의 창을 자유자재로 띄울 수 있으면 그걸로 괜찮습니다. 추가적인 과제를 하나 해보겠습니다. 위의 프로그램과 같은 제목과 크기를 가지면서 다른 창에 가려지지 않도록 '항상 위' 옵션을 가진 창을 만드려면 어떻게 해야할까요? 스스로 생각해보세요.

Tip: 용어 표기

원활한 이해를 위해 아래와 같이 통일된 규칙으로 적겠습니다.

1. 'GUI'는 컴퓨터 분야 자체의 의미로, 'Gui 객체'는 오토핫키에서 창을 구현할 때 쓰이는 객체를 나타내는 의미로 사용합니다. 오토핫키 공식 문서의 대소문자 규범을 존중하여 오토핫키에서 생성하는 객체를 지칭할 땐 첫 글자를 제외한 나머지 글자를 소문자로 적는 것입니다.

2. 멤버 함수를 단독으로 지칭할 땐 객체명.함수명()과 같이 적겠습니다. 객체명으론 인스턴스명이 아닌 해당 객체의 클래스명(예: Array, Gui 등)을 사용하여 표기합니다. 속성과 메서드를 명확히 구분하기 위해 메서드에는 함수를 나타내는 ()를 붙였습니다.

질문하러 가기