⚠ 이 강좌는 오토핫키 v2를 다룹니다
지금 보시는 강좌는 과거 오랜 시간동안 알려진 오토핫키(v1.1)의 차세대 버전인 오토핫키 v2를 다루고 있습니다.
만약 구버전인 '오토핫키 v1.1'의 강좌를 찾으신다면 프날 오토핫키 강좌(https://pnal.kr)를 봐주시면 되지만,
새로 오토핫키를 배우신다면 v2 버전을 배우시는 것을 강력히 추천드립니다.
70. 창 생성하기
마지막 수정일: 2023-12-22
먼저 화면에 눈에 보이는 '창'을 만들어보겠습니다.
Gui 객체 생성
오토핫키에서 배열과 맵이 객체이고 생성자(Array()
,Map()
)로 생성했던 것처럼, GUI 창을 만드는 것 역시 Gui 객체를 만들어서 변수에 담는 것부터 시작합니다.
우선 Gui 객체의 생성자인 Gui()
에 대해 배워보겠습니다.
Gui([Options, Title, EventObj])
GUI 생성자의 원형
셋 모두 선택 매개변수이기 때문에 아래와 같이 전부 생략해도 정상 작동합니다.
1 MyGui := Gui()
Options 매개변수를 통해 만들 창의 성질을 결정할 수 있습니다.
적용할 옵션은 +옵션
과 같이, 제거할 옵션은 -옵션
과 같이 아래 표를 보고 문자열로 적어주면 됩니다.
성질 | 설명 |
---|---|
AlwaysOnTop | 창을 다른 창보다 항상 위에 있도록 함. |
Caption (기본 적용됨) | 창의 테두리(닫기 버튼이 있는 영역)를 생성함. |
Disabled | 창을 '사용 안함' 상태로 만듦(=모든 컨트롤의 상호작용을 막음). |
MaximizeBox | 최대화 버튼을 추가함. |
MinimizeBox (기본 적용됨) | 최소화 버튼을 추가함. |
MinSize | 창의 최소 크기를 제한함. +MinSize너비x높이 와 같이 사용. |
MaxSize | 창의 최대 크기를 제한함. +MaxSize너비x높이 와 같이 사용. |
Resize | 창의 테두리를 잡고 드래그하여 크기 조절을 가능하게 함. |
여러 옵션을 적용할 경우 각 옵션 사이를 띄어서 적어줍니다. 예를 들어서, 다른 창보다 항상 위에 있으며 크기 조절이 가능한 창은 아래와 같이 만들 수 있습니다.
1 MyGui := Gui("+AlwaysOnTop +Resize")
기본 적용된 'MinimizeBox' 옵션만 제거된 창을 만드려면 아래와 같이 적겠죠.
1 MyGui := Gui("-MinimizeBox")
이어서 Title 매개변수를 살펴보겠습니다. 이 매개변수는 창의 상단에 표시되는 제목을 결정합니다. 47강에서 창의 구조에 대해 설명했죠? 이곳에 문자열로 적어준 인수에 따라 창의 제목이 달라집니다. 기본 값은 프로그램 파일의 이름과 같습니다.
1 MyGui := Gui(, "내 Gui 프로그램")
위와 같이 Title 매개변수에 전달해주는 인수로 문자열을 전송함으로써 창의 제목을 설정해줄 수 있습니다.
이 예시에선 첫 번째 매개변수(Options)에 아무 인수를 전달하지 않았으므로 생략하여 콤마(,
)가 먼저 왔다는 것을 유의하세요.
첫 번째 인수는 비어있고, 두 번째 인수를 전달해준 것입니다!
EventObj 매개변수는 중요하지 않으므로 설명하지 않겠습니다.
Gui 객체를 화면에 표시하기
Gui 객체를 만든다고 해서 화면에 바로 창이 나타나는 것은 아닙니다.
객체는 멤버 변수와 멤버 함수, 즉 속성과 메서드를 가지고 있다고 했으므로, 우리가 생성한 Gui 객체 또한 이를 가지고 있습니다.
그중에는 "창을 화면에 표시하라"를 수행하는 Show()
메서드도 있습니다.
1 MyGui := Gui()
2 MyGui.Show()
위 예시와 같이 Show()
메서드를 이용하여 생성한 창을 화면에 띄울 수 있습니다.
앞서 배운 내용을 응용하여 아래와 같이 적으면 제목이 '오토핫키 연습용'인 창이 생성되겠죠?
1 MyGui := Gui(, "오토핫키 연습용")
2 MyGui.Show()
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
옵션은 소문자로 적어줍니다.
Maximize
와 Minimize
는 상식적으로 동시에 적을 수 없다는 점도 아시겠죠?
실습
1. 원하는 창 만들기
제목이 '새 GUI 프로그램'이고 너비가 300px, 높이가 300px인 창을 만들어서 화면에 띄워보겠습니다.
1 NewGui := Gui(, "새 GUI 프로그램")
2 NewGui.Show("w300 h300")
제가 글재주가 없어 설명이 어려워서 그렇지, 막상 실습을 해보면 쉽죠? 원하는 성질의 창을 자유자재로 띄울 수 있으면 그걸로 괜찮습니다. 추가적인 과제를 하나 해보겠습니다. 위의 프로그램과 같은 제목과 크기를 가지면서 다른 창에 가려지지 않도록 '항상 위' 옵션을 가진 창을 만드려면 어떻게 해야할까요? 스스로 생각해보세요.
Tip: 용어 표기
원활한 이해를 위해 아래와 같이 통일된 규칙으로 적겠습니다.
1. 'GUI'는 컴퓨터 분야 자체의 의미로, 'Gui 객체'는 오토핫키에서 창을 구현할 때 쓰이는 객체를 나타내는 의미로 사용합니다. 오토핫키 공식 문서의 대소문자 규범을 존중하여 오토핫키에서 생성하는 객체를 지칭할 땐 첫 글자를 제외한 나머지 글자를 소문자로 적는 것입니다.
2. 멤버 함수를 단독으로 지칭할 땐 객체명.함수명()
과 같이 적겠습니다.
객체명으론 인스턴스명이 아닌 해당 객체의 클래스명(예: Array, Gui 등)을 사용하여 표기합니다.
속성과 메서드를 명확히 구분하기 위해 메서드에는 함수를 나타내는 ()
를 붙였습니다.