컨트롤이란?
컨트롤이란 사용자와의 인터페이스를 이루는 도구
컨트롤은 제어 조절이라는 뜻인데 이 말 뜻대로 컨트롤은 사용자가 프로그램을 제어하는 수단
컨트롤도 하나의 윈도우이다. 화면상의 일정한 영역을 차지하며 자신의 고유 메시지를 처리할 수 있는 능력을 가지고 있다. 그렇다고 해서 메모장이나 탐색기같은 진짜 윈도우처럼 타이틀 바나 경계선을 가지고 독립적으로 사용되는 것은 아니며 보통 대화상자의 차일드 윈도우로 존재
버튼
사용 예)
//< 버튼
m_hwnd[ CTL_BTN_01 ] =
CreateWindow( TEXT("button"), TEXT("Click Me"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
20, 20, 100, 25,
g_hWnd, ( HMENU )CTL_BTN_01, g_hInst, NULL );
CreateWindow의 첫 번째 인수는 만들고자 하는 윈도우의 윈도우 클래스이다.
컨트롤은 운영체제에 의해 윈도우 클래스가 미리 등록되어 있으므로 별도로 등록할 필요없이 이 인수에 만들고자 하는 컨트롤의 윈도우 클래스명을 적어주면 된다. 버튼은 "button"이며 대소문자 구분하지 않는다.
두번째는 생성할 윈도우의 타이틀 바에 나타날 문구이다.
리스트 박스나 스크롤 바처럼 캡션이 필요없고 내용만 있는 컨트롤은 NULL을 지정하면 된다.
세번째는 스타일을 지정해주는 곳이며
네번째는 위치와 크기
다섯번째는 부모의 핸들
여섯번째는 ID인데 이것을 통해 컨트롤을 구분해준다. HMENU로 캐스트를 해줘야하며 주로 ID는 #define으로 매크로 상수를 정의해 쓰는 것이 바람직함
일곱번째는 이 윈도우를 만드는 인스턴스 핸들
마지막은 사용자 정의 데이터이며 MDI에서 사용하는 구조체
컨트롤을 제어하기 위해서는 컨트롤에서 보내지는 메시지를 부모 윈도우에서 처리해줘야 한다. 이 때 넘어오는 메시지는 WM_COMMAND 형태로 날아오게 된다.
1. HIWORD( wParam ) : 통지 코드
2. LOWORD( wParam ) : 컨트롤의 ID
3. lParam : 메시지를 보낸 차일드 윈도우의 윈도우 핸들
일반적으로 WM_COMMAND 메시지를 처리할 때에 컨트롤의 ID를 통해 분기를 먼저하고 그 아래에서 HIWORD를 이용하여 메시지를 처리한다.
체크박스
BM_GETCHECK : 체크 박스가 현재 체크되어 있는 상태인지 조사하며 wParam, lParam은 사용하지 않는다. 체크 상태는 리턴값으로 돌려진다.
BM_SETCHECK : 체크 박스의 체크 상태를 변경하며 wParam에 변경할 체크 상태를 지정한다.
라디오 버튼
BS_RADIOBUTTON
BS_AUTORADIOBUTTON
둘 중 하난의 스타일을 지정하면 라디오 버튼이 된다.
체크박스와 다른 점은 그룹을 지정할 수 있어서 그룹내에서 하나만 선택할 수 있다. 그룹내에 다른 라디오 버튼을 클릭하게 된다면 기존에 선택되어 있던 라디오 버튼은 자동으로 체크가 아닌상태로 바뀌게 된다.
에디트
에디트는 문자열을 직접 입력받았을 때 사용하는데 버튼과 마찬가지로 윈도우즈에서 가장 흔하게 볼 수 있는 컨트롤이다.
리스트 박스
리스트 박스는 선택 가능한 여러 개의 항목들을 나열해 놓고 그 중 하나를 선택하는 컨트롤이며 여기서 항목이란 주로 문자열이다. 제시된 목록 중 하나를 고르는 것이기 때문에 사용자 입장에서는 사용하기 편리하다.
콤보 박스
콤보 박스는 에디트 컨트롤과 리스트 박스를 결합해 놓은 컨트롤이다. 그래서 목록에 있는 항목 중의 하나를 선택할 수도 있고 원하는 항목이 없을 경우 에디트에 직접 입력해 넣을 수도 있다. 또한 리스트 박스는 항상 열려 있는데 비해 콤보 박스는 필요한 경우만 목록을 열어 선택함으로 화면 공간을 적게 차지한다는 장점도 있다. 반면 항목을 선택하려면 일단 목록을 아래로 펼쳐야 하므로 리스트 박스보다 선택에 시간이 걸리며 선택 가능한 항목에 어떤 것들이 있는지 바로 확인할 수 없어 쓰기에는 조금 번거롭다는 단점도 있다.
1. CBS_SIMPLE : 에디트와 리스트 박스를 가지되 리스트 박스가 항상 펼쳐져 있다.
2. CBS_DROPDOWN : 에디트와 리스트 박스를 가진다.
3. CBS_DROPDOWNLIST : 리스트 박스만 가지며 에디트에 항목을 입력할 수는 없다.
스크롤 바
윈도우의 스크롤 상태를 관리하기 위해 사용하기도 하며 일정 범위에 있는 값을 대충 선택할 때도 사용한다.
스태틱
스태틱은 다른 컨트롤에 비해 비교적 간단한 컨트롤이다. 사용자로부터 입력을 받아들이는 기능은 없고 오로지 문자열을 보여주는 것이 기능의 전부이다. 주로 에디트나 다른 컨트롤 옆에 위치하며 컨트롤의 용도를 설명하는 역할을 한다. 버튼은 표면에 제목을 붙일 수 있지만 리스트 박스나 스크롤 바 등의 컨트롤은 그 자체에 제목을 붙일만한 곳이 없으므로 스태틱 컨트롤을 제목 표시용으로 사용한다.