MFC :: Chapter 9 (컨트롤 및 리소스 II) - 102번째 이야기
탭 컨트롤(Tab Control)
Tab Control은 주어진 탭을 선택함에 따라 해당하는 정보를 분류하여 보여준다. 흔히 등록 정보 대화상자 같이 작은 대화상자 안에 많은 정보를 표현하고자 할 때, 유용하게 사용되고 있다. 다음은 윈도우의 [제어판]의 [마우스 등록정보] 대화상자이다. 여기서도 Tab Control을 사용함으로써 많은 정보들을 관련 있는 것들로 분류해서 보여주고 있다. 이 대화상자를 보는 사용자는 정보를 한 눈에 요약해서 이해할 수 있다.
슬라이더 컨트롤(Slider Control)
Slider Control은 주어진 범위의 값이나 비연속적인 값을 입력받고자 할 때 흔히 사용한다. 주어진 일정한 범위 안에서 마우스를 드래그 함으로써 값을 증가-감소할 수 있게 하는 컨트롤이다. 외관상으로는 스크롤 바와 유사한 형태를 가지고 있다. 사용법이나 기능도 유사하다고 할 수 있다. 다음은 윈도우의 [볼륨 조절 대화상자]이다. Slider Control의 대표적인 예라고 할 수 있다.
TC_ITEM 구조체
TC_ITEM은 Tab Control의 아이템을 삽입하거나 얻어올 때 사용하는 구조체이다. 이 구조체의 원형은 다음과 같다.
typedef struct tagTCITEM {
UINT mask;
DWORD dwState;
DWORD dwStateMark;
LPTSTR pszText;
int cchTextMax;
int iImage;
LPARAM lParam;
} TCITEM, FAR *LPTCITEM;
( mask : 얻거나 설정하기 위한 유효한 마스크
dwState : Tab Control 아이템의 현재 상태를 명시
dwStateMask : 유효 정보를 내포하는 dwState 멤버인 비트를 명시
pszText : 아이템 정보를 설정할 때 Tab 텍스트를 내포하는 문자열의 주소
ccTextMax : pszText 멤버에 의해 위치하고 있는 버퍼의 크기
iImage : Tab Control 이미지 리스트의 인덱스
lParam : Tab Control 아이템과 관련하여 규정된 데이터 애플리케이션 )
CSliderCtrl::SetRange() 함수
SetRange() 함수는 슬라이더 컨트롤의 상-하위 범위를 설정하는 함수이다. 원형은 다음과 같다.
void SetRange(int nMin, int nMax, BOOL bRedraw = FALSE);
( nMin : 슬라이더의 최소 위치
nMax : 슬라이더의 최대 위치
bRedraw : 이 인수가 TRUE이면 슬라이더는 범위가 설정된 후 다시 그려진다. 그렇지 않으면 슬라이더는 다시 그려지지 않는다 )
CWnd::GetWindowRect() 함수
GetWindowRect() 함수는 CWnd 객체의 윈도우 타이틀 바와 경계선 등의 크기를 얻어오는 함수이다. 원형은 다음과 같다.
void GetWindowRect(LPRECT lpRect) const;
( lpRect : 좌측 상위와 우측 하위의 스크린 좌표를 얻을 위치 )
ScreenToClient() 함수
GetWindowRect() 함수는 CWnd 객체의 윈도우 타이틀 바와 경계선 등의 크기를 얻어오는 함수이다. 원형은 다음과 같다.
void ScreenToClient(LPPOINT lpPoint) const;
void ScreenToClient(LPRECT lpRect) const;
( lpPoint : 전환될 스크린 좌표를 내포하는 CPoint 객체나 POINT 구조의 위치
lpRect : 전환될 스크린 좌표를 내포하는 CRect 객체나 RECT 구조의 위치 )
CSliderCtrl::GetPos() 함수
GetPos() 함수는 슬라이더 컨트롤의 현재 위치의 값을 반환하기 위해 호출하는 함수이다. 원형은 다음과 같다.
int GetPos() const;
스핀 컨트롤(Spin Control)
Spin Control은 두 개의 작은 화살표 버튼으로 구성되어 사용자가 일정한 범위의 값을 입력할 수 있게 한다. 화살표의 방향은 스타일 설정에 따라 바뀔 수 있다. 일반적으로 Spin Control은 독립적으로 사용하기보다는 Edit Box 안에 붙여서 같이 사용되는 경우가 많다. 이런 경우를 버디(Buddy) 컨트롤이라고 한다. 이 경우 버디 컨트롤의 값을 키보드가 아닌 마우스를 통해 변경시키고자 할 때 사용되는 것이다. 물론 키보드도 가능하다.
다음은 [내 컴퓨터]의 [등록정보]에서 [고급] 탭에 있는 [시작 및 복구] 버튼을 눌렀을 때 나타나는 대화상자의 예이다. 여기에서도 [30초]라는 곳에 Spin Control과 Edit Box를 같이 사용하고 있다.
프로그레스 바 컨트롤(Progress Bar Control)
Progress Bar Control은 어떤 작업의 진행 상황을 표현하는데 유용하게 사용된다. 다른 컨트롤과는 달리 임의의 데이터 입력에는 사용할 수 없다. 윈도우에서 파일을 복사, 이동 작업을 할 때 대화상자에 진행상황을 나타내주는 것이 바로 이 Progress Bar Control이다.
Progress Bar Control은 작업의 진행상황을 시각적으로 표현해 줌으로써 사용자에게 다른 작업을 할 시간을 덜어줄 수도 있다. 왜냐하면 윈도우는 다중 프로세서 운영체제이기 때문이다.
주소 컨트롤(IP Address Control)
IP 주소 컨트롤은 사용자로부터 텍스트를 입력받는 면에서 Edit Box와 유사한 컨트롤이다. 그러나 이 컨트롤은 다음과 같은 인터넷 프로토콜(IP) 형식의 숫자 주소만을 입력할 수 있다.
이 형식은 세 자릿수를 가진 네 개의 필드로 구성된다. 그리고 각 필드는 수치적 텍스트만을 허용하며 수의 범위 또한 0부터 255까지만 입력 가능하다. 각 필드 입력시 세 자리가 채워지면 자동으로 우측 다음필드로 이동된다. 다음은 IP 컨트롤을 사용한 예를 보여주고 있다.
날짜/시간 선택 컨트롤(Date Time Picker Control)
Date Time Picker 컨트롤(CDateTimeCtrl)은 직관적이고 쉽게 볼 수 있도록 하여 특정 날짜를 입력하거나 선택하도록 하는 컨트롤이다. 기본적인 인터페이스의 성격은 Combo Box와 유사하지만 컨트롤을 확장하면 기본적으로 특정 날짜를 지정할 수 있는 Month Calendar 컨트롤이 표시된다. 그리고 날짜를 선택하면 바로 Month Calendar 컨트롤이 표시된다. 그리고 날짜를 선택하면 바로 Month Calendar 컨트롤은 사라진다. 또한 컨트롤의 스타일에 따라 다른 형식으로 출력되기도 한다.
애니메이트 컨트롤(Animate Control)
Animate Control은 AVi 동영상 파일을 재생하고 제어하는데 이용된다. 일반적으로 AVI 파일이라면 영화라든지 만화 같은 영상을 생각할 것이다. 하지만 Animate Control에서의 AVI 파일은 단 두 가지 뿐이다. RLE(Run-Length Encoding)을 사용해 압축한 파일과 압축되지 않은 파일 두 가지이다. 그리고 Animate Control은 사운드를 지원하지 않는다. Animate Control의 대표적인 예는 다음 그림과 같이 파일 복사, 파일 삭제 등에 경우에 나타나는 대화상자 안의 애니메이션이다.
CProgressCtrl::SetRange() 함수
SetRange() 함수는 프로그레스 바 컨트롤의 상-하위 제한 범위를 설정하는 함수이다. 원형은 다음과 같다.
void SetRange(short nLower, short nUpper);
( nLower : 하위의 제한 범위를 명시 (디폴트는 '0'이다)
nUpper : 상위의 제한 범위를 명시 (디폴트는 '100'이다) )
CProgressCtrl::SetPos() 함수
SetPos() 함수는 프로그레스 바의 현재 위치를 설정하고 진행정도를 나타내는 바가 다시 그려지는 함수로 원형은 다음과 같다.
int SetPos(int nPos);
( nPos : 프로그레스 바의 다시 그려질 새로운 위치 )
OnTimer() 함수
OnTimer() 함수는 WM_TIMER 메시지가 발생할 때마다 호출되게 된다. 그러면 이 메시지를 어떻게 발생시키는가? 바로 SetTimer()라는 함수가 이 메시지를 발생시키는데 일정 시간 간격을 설정함으로써 이 일정시간마다 WM_TIMER 메시지를 발생시킨다. 결과적으로 SetTimer() 함수에서 지정한 시간마다 OnTimer() 함수를 수행하게 되는 것이다.








Practice9_1.rar
댓글을 달아 주세요.