LeeWonTae 2014. 9. 12. 11:24

컨트롤(Control)

컨트돌이란 사용자와의 인터페이스를 이루는 도구이다.

인터페이스를 이룬다는 말은 사용자로부터 명령과 입력을 받아들이고 출력 결과를 보여준다는 뜻이므로

컨트롤은 곧 입출력 도구를 뜻한다.

 

컨트롤도 하나의 윈도우이다.

화면상의 일정한 영역을 차지하며 자신의 고유 메시지를 처리할 수 있는 능력을 가지고 있다.

그렇다고 독립적으로 사용되는 것은 아니며 보통 대화상자의 차일드 윈도우로 존재한다.

컨트롤은 윈도우즈가 운영체제 차원에서 제공하기 때문에 미리 등록되어 있는 윈도우 클래스를 사용하면 된다.

미리 정의된 윈도우 클래스에는 다음과 같은 종류가 있다.

 

컨트롤 생성 함수 CreateWindow 함수

CreateWindow(lpClassName, lpWindowName, dwStyle, x, y,

nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);

lpClassName

  - 만들고자 하는 윈도우의 윈도우 클래스

lpWindowName

  - 윈도우 타이틀 바에 나타날 윈도우의 제목(쉽게 말해 캡션)

dwStyle

  - 윈도우의 속성값

  - 컨트롤이 차일드 윈도우 이며 화면에 나타나야 하므로 

    WS_CHILD 스타일과 WS_VISIBLE 스타일은 예외 없이 지정하는 것이 정석

  - 그 외 컨트롤에 따른 고유한 스타일을 추가 지정.

x, y, nWidth, nHeight

  - 윈도우의 위치(x,y)

  - 윈도우의 크기(nWidth,nHeight)

hWndparent

  - 컨트롤의 부모 윈도우 지정

  - 메인 윈도우를 생성하는 경우는 NULL

hMenu

  - 윈도우에서 사용할 메뉴의 핸들

  - 단 차일드 컨트롤은 메뉴를 가지지 않으므로 이 인수를 컨트롤의 ID 지정 용도로 사용

hInstance

  - 윈도우를 만드는 인스턴스의 핸들

lpParam

  - 사용자 정의 데이터이며 MDI에서 사용하는 구조체

 

컨트롤은 자신에게 무슨 일이 일어났을 때 부모 윈도우로

통지 메시지(Notification Message)를 보내 어떤 사건이 발생 했는지 알린다.

WM_COMMAND 메시지를 통해 부모 윈도우로 전달되는 정보들

 

1. 버튼(Button)

버튼의 스타일

버튼의 스타일은 값은 BS_ 접두어로 시작된다.

 

버튼의 통지 메시지

  - 항상 사용자가 자신을 클릭했다는 의미의 BN_CLICKED 메시지를 보낸다.

 

 

2. 체크박스(CheckBox)

  - 참, 거짓의 진위적인 선택을 입력 받을때 주로 사용

 

컨트롤이 부모 윈도우로 보내는 통지 메시지와는 달리

부모 윈도우가 체크 박스의 현재 상태를 알아보거나 상태를 바꾸고자 할 때도 차일드 윈도우로 메시지를 보낸다.

부모 윈도우가 체크 박스로 보낼 수 있는 메시지는 두 가지이다.

 

BM_GETCHECK에 의해 리턴 되는 값, 또는 BM_SETCHECK에 의해 설정되는 체크 박스의 상태는 다음 세 가지 이다.

 

 

라디오 버튼(Radio Button)

체크 버튼이 진위적인 옵션을 개별적으로 입력받는다면,

라디오 버튼은 여러 가지 선택 사항 중 한 가지만 선택할 필요가 있을 때 사용한다.

그래서 하나의 선택 사항에 대해 여러 개의 라디오 버튼들이 그룹을 이루어 사용된다는 특징이 있다.

 

라디오 버튼의 그룹을 구성하는 방법은 간단하다.

첫 번째 라디오 버튼에만 WS_GROUP 스타일을 주고 나머지 라디오 버튼은 WS_GROUP 스타일을 주지 않으면 된다.

 

라디오 버튼들이 같은 그룹에 속하는지를 사용자에게 표시하기 위해 그룹 박스 컨트롤이 사용된다.

그룹 박스는 BS_GROUPBOX 스타일을 가지는 버튼의 일종이지만 화면으로 보여지기만 할 뿐

다른 기능을 가지지 않는 단순한 장식이다.

 

 

3. 에디트

에디트는 문자열을 직접 입력받을 때 사용

 

에디트 통지 메시지

 

4. 리스트 박스

선택 가능한 여러 개의 항목들을 나열해 놓고 그 중 하나(또는 여러 개)를 선택하는 컨트롤

 

리스트박스 스타일

 

부모윈도우가 리스트 박스를 조작하고자 할때 사용하는 통지 메시지

 

리스트 박스에서 사건 발생 시 부모 윈도우로 보내는 통지 메시지

 

콤보 박스

에디트 컨트롤과 리스트 박스를 결합해 놓은 컨트롤

 

콤보박스 스타일

 

5. 스크롤 바

앞서 다룬 컨트롤들에 비해서는 비교적 복합한 컨트롤이다.

스크롤 바는 범위와 현재 위치값을 가지는데 다음 두 함수로 이 값들을 지정한다.

BOOL SetScrollRange(HWND hWnd, int nBar, int nMinPos, int nMaxPos, BOOL bRedraw);

int SetScrollPos(HWND hWnd, in nBar, int nPos, BOOL bRedraw);

 

다른 컨트롤들은 자신에게 변화가 있을 때 부모 윈도우로 WM_COMMAND 통지 메시지를 보내는 데 비해

스크롤 바는 WM_HSCROLL(수평일 경우), WM_VSCROLL(수직일 경우)이라는 별도의 메시지를 부모 윈도우로 보낸다.

이 메시지들은 다음과 같은 추가 정보를 보낸다.

 

LOWORD(wParam)으로 전달 되는 값은 사용자의 스크롤 요구 사항을 나타내며 종류는 다음과 같다.

 

 

스태틱

오로지 문자열을 보여주는 기능만 하는 컨트롤

 

 

 

- 윈도우즈 API 정복 中 -