트랙바 컨트롤 정보

트랙바는 채널에 슬라이더(엄지 손가락이라고도 함)와 선택적 눈금이 들어 있는 창입니다. 사용자가 마우스 또는 방향 키를 사용하여 슬라이더를 이동하면 트랙바가 변경 내용을 나타내는 알림 메시지를 보냅니다.

트랙바는 사용자가 개별 부호 없는 정수 값 또는 범위에서 부호 없는 연속 정수 값 집합을 선택하려는 경우에 유용합니다. 예를 들어 트랙바를 사용하여 사용자가 지정된 눈금 표시로 슬라이더를 이동하여 키보드의 반복 속도를 설정할 수 있습니다. 다음 그림에서는 일반적인 트랙바를 보여 줍니다.

screen shot of a trackbar with labels at the ends for slow and fast

트랙바의 슬라이더는 만들 때 지정하는 증분 단위로 이동합니다. 이 범위의 값을 논리 단위라고 합니다. 예를 들어 트랙바에 0에서 5까지의 논리 단위가 있어야 한다고 지정하면 슬라이더는 트랙바 왼쪽의 위치와 범위의 각 증가에 대해 한 위치의 6개 위치만 차지할 수 있습니다. 일반적으로 이러한 각 위치는 눈금으로 식별됩니다. 그러나 눈금의 수는 임의이며 논리적 위치 수보다 적을 수 있습니다.

CreateWindowEx 함수를 사용하여 TRACKBAR_CLASS 창 클래스를 지정하여 트랙바를 만듭니다. 트랙바를 만든 후에는 트랙바 메시지를 사용하여 많은 속성을 설정하고 검색할 수 있습니다. 슬라이더에 대한 최소 및 최대 위치 설정, 눈금 표시 그리기, 선택 범위 설정 및 슬라이더 위치 조정을 변경할 수 있습니다.

선택 범위

TBS_ENABLESELRANGE 스타일을 사용하여 트랙바를 만드는 경우 선택 범위를 지정할 수 있습니다. 트랙바가 선택 범위를 강조 표시하고 다음 그림과 같이 시작 및 끝에 삼각형 눈금 표시를 표시합니다.

screen shot of a trackbar with a range highlighted

트랙바의 선택 범위는 어떤 방식으로든 해당 기능에 영향을 주지 않습니다. 범위를 구현하는 것은 애플리케이션에 달려 있습니다. 다음 방법 중 하나로 이 작업을 수행할 수 있습니다.

  • 선택 범위를 사용하여 사용자가 일부 매개 변수의 최대값과 최소값을 설정할 수 있도록 합니다. 예를 들어 사용자는 슬라이더를 위치로 이동한 다음 "Max"라는 레이블이 지정된 단추를 클릭할 수 있습니다. 그런 다음, 애플리케이션은 선택 범위를 설정하여 사용자가 선택한 값을 표시합니다.
  • WM_HSCROLL 또는WM_VSCROLL 알림을 처리하고 선택 범위 밖의 이동을 허용하지 않도록 하여 컨트롤 내에서 미리 결정된 하위 범위로 슬라이더의 이동을 제한합니다. 예를 들어 사용자가 선택한 다른 선택 사항 또는 사용 가능한 리소스에 따라 사용자가 사용할 수 있는 값의 범위가 변경될 수 있는 경우 이 작업을 수행할 수 있습니다.

트랙바 메시지

트랙바의 논리 단위는 트랙바가 나타낼 수 있는 연속 값 집합입니다. 일반적으로 트랙바를 만드는 즉시 TBM_SETRANGE 메시지를 사용하여 가능한 값의 범위를 지정하여 정의됩니다. 애플리케이션은 TBM_SETRANGE, TBM_SETRANGEMAX또는TBM_SETRANGEMIN 사용하여 범위를 동적으로 변경할 수 있습니다.

슬라이더의 위치(즉, 사용자가 선택한 값)를 검색하려면 TBM_GETPOS 메시지를 사용합니다. 슬라이더의 위치를 설정하려면 TBM_SETPOS 메시지를 사용합니다.

TBS_NOTICKS 스타일을 지정 하지 않으면 트랙바의 시작과 끝에 눈금이 자동으로 표시됩니다. (Microsoft Visual Studio 리소스 편집기에서 Tick Marks 속성을 False로 설정하는 것을 의미합니다. TBS_AUTOTICKS 스타일을 사용하여 트랙바를 따라 정기적으로 추가 눈금 표시를 자동으로 표시할 수 있습니다. 기본적으로 TBS_AUTOTICKS 트랙바에는 트랙바 범위의 각 증분에서 눈금 표시가 표시됩니다. 자동 눈금 표시에 대해 다른 간격을 지정하려면 TBM_SETTICFREQ 메시지를 트랙바로 보냅니다. 예를 들어 이 메시지를 사용하여 1에서 100까지의 범위에 10개의 눈금 표시만 표시할 수 있습니다.

단일 눈금의 위치를 설정하려면 TBM_SETTIC 메시지를 보냅니다. 트랙바에서는 각 눈금 표시의 위치를 저장하는 DWORD 값 배열을 유지 관리합니다. 배열에는 트랙바가 자동으로 만드는 첫 번째 및 마지막 눈금 표시가 포함되지 않습니다. TBM_GETTIC 메시지를 보내 해당 눈금 표시의 위치를 검색할 때 이 배열에서 인덱스로 지정할 수 있습니다. 또는 TBM_GETPTICS 메시지를 보내 배열에 대한 포인터를 검색할 수 있습니다. 배열의 요소 수는 TBM_GETNUMTICS 메시지에서 반환된 틱 수보다 2개 더 적습니다. 이는 TBM_GETNUMTICS 반환된 개수에 배열에 포함되지 않은 첫 번째 및 마지막 눈금 표시가 포함되기 때문입니다. 눈금 표시의 실제 위치를 검색하려면 트랙바 창의 클라이언트 좌표에서 TBM_GETTICPOS 메시지를 보냅니다. TBM_CLEARTICS 메시지는 트랙바의 눈금 표시의 첫 번째와 마지막을 제외한 모든 것을 제거합니다.

트랙바의 선 크기는 오른쪽 화살표 키 또는 아래쪽 화살표 키와 같은 화살표 키의 키보드 입력에 대한 응답으로 슬라이더가 이동하는 거리를 결정합니다. 줄 크기를 검색하거나 설정하려면 TBM_GETLINESIZE 보내고 메시지를 TBM_SETLINESIZE . 또한 트랙바에서는 사용자가 화살표 키를 누를 때 TB_LINEUP 및 TB_LINEDOWN 알림 코드를 부모 창으로 보냅니다.

트랙바의 페이지 크기는 PAGE UP 또는 PAGE DOWN 키와 같은 키보드 입력에 대한 응답으로 슬라이더가 이동하는 정도 또는 트랙바 채널의 클릭과 같은 마우스 입력을 결정합니다. 페이지 크기를 검색하거나 설정하려면 TBM_GETPAGESIZE 보내고 메시지를 TBM_SETPAGESIZE . 또한 트랙바가 페이지를 스크롤하는 키보드 또는 마우스 입력을 받으면 TB_PAGEUP 및 TB_PAGEDOWN 알림 코드를 부모 창으로 보냅니다. 자세한 내용은 트랙바 알림 메시지를 참조하세요.

애플리케이션은 메시지를 보내 트랙바의 차원을 검색할 수 있습니다. TBM_GETTHUMBRECT 메시지는 슬라이더의 경계 사각형을 검색합니다. TBM_GETTHUMBLENGTH 메시지는 슬라이더의 길이를 검색합니다. TBM_GETCHANNELRECT 메시지는 슬라이더가 이동하는 영역인 트랙바 채널의 경계 사각형을 검색합니다. 범위가 선택될 때 강조 표시가 포함됩니다. 트랙바에 TBS_FIXEDLENGTH 스타일이 있는 경우 TBM_SETTHUMBLENGTH 메시지를 보내 슬라이더의 길이를 변경할 수 있습니다.

추적 표시줄에 메시지를 전송하여 선택 범위를 검색하거나 설정합니다. TBM_SETSEL 메시지를 사용하여 선택 영역의 시작 및 끝 위치를 설정합니다. 선택 영역의 시작 위치 또는 끝 위치만 설정하려면 TBM_SETSELSTART 또는 TBM_SETSELEND 메시지를 보냅니다. 선택 범위의 시작 또는 끝 위치를 검색하려면 TBM_GETSELSTART 또는 TBM_GETSELEND 메시지를 보냅니다. 선택 범위를 지우고 트랙바를 원래 범위로 복원하려면 TBM_CLEARSEL 메시지를 보냅니다.

참고

사용자가 선택 범위 외부의 값을 선택할 수 없도록 하는 것은 애플리케이션의 책임입니다. 컨트롤 자체는 사용자가 슬라이더를 범위 밖으로 이동하는 것을 방지하지 않습니다.

 

트랙바 알림 메시지

트랙바가 부모에 WM_HSCROLL 또는 WM_VSCROLL 메시지를 보내 사용자 작업의 부모 창을 알립니다. TBS_HORZ 스타일이 있는 트랙바가 WM_HSCROLL 메시지를 보냅니다. TBS_VERT 스타일이 있는 트랙바가 WM_VSCROLL 메시지를 보냅니다. WM_HSCROLL 또는 WM_VSCROLLwParam 매개 변수의 하위 단어에는 알림 코드가 포함되어 있습니다. TB_THUMBPOSITION 및 TB_THUMBTRACK 알림 코드의 경우 wParam 매개 변수의 상위 단어는 슬라이더의 위치를 지정합니다. 다른 모든 알림 코드의 경우 상위 단어는 0입니다. TBM_GETPOS 메시지를 보내 슬라이더 위치를 확인합니다. lParam 매개 변수는 트랙바에 대한 핸들입니다.

시스템은 사용자가 키보드를 사용하여 트랙바와 상호 작용하는 경우에만 TB_BOTTOM, TB_LINEDOWN, TB_LINEUP 및 TB_TOP 알림 코드를 보냅니다. TB_THUMBPOSITION 및 TB_THUMBTRACK 알림 코드는 사용자가 마우스를 사용하는 경우에만 전송됩니다. 두 경우 모두 TB_ENDTRACK, TB_PAGEDOWN 및 TB_PAGEUP 알림 코드가 전송됩니다. 다음 표에는 가상 키 코드 주석이 전송되도록 하는 트랙바 알림 코드 및 이벤트( 가상 키 코드 또는 마우스 이벤트)가 나와 있습니다.

알림 코드 보낸 이유
TB_BOTTOM VK_END
TB_ENDTRACK WM_KEYUP (사용자가 관련 가상 키 코드를 보낸 키를 릴리스했습니다.)
TB_LINEDOWN VK_RIGHT 또는 VK_DOWN
TB_LINEUP VK_LEFT 또는 VK_UP
TB_PAGEDOWN VK_NEXT (사용자가 슬라이더의 아래 또는 오른쪽 채널을 클릭)
TB_PAGEUP VK_PRIOR (사용자가 슬라이더의 위 또는 왼쪽 채널을 클릭)
TB_THUMBPOSITION TB_THUMBTRACK 알림 코드를 따르는 WM_LBUTTONUP
TB_THUMBTRACK 슬라이더 이동(사용자가 슬라이더를 끌어)
TB_TOP VK_HOME

 

기본 트랙바 메시지 처리

이 섹션에서는 트랙바에서 수행하는 창 메시지 처리에 대해 설명합니다.

메시지 처리 수행됨
WM_CAPTURECHANGED WM_LBUTTONDOWN 처리하는 동안 타이머가 설정된 경우 타이머를 종료하고 필요한 경우 TB_THUMBPOSITION 알림 코드를 보냅니다. 항상 TB_ENDTRACK 알림 코드를 보냅니다.
WM_CREATE 줄 크기, 페이지 크기 및 눈금 표시 빈도를 기본값으로 설정하는 등 추가 초기화를 수행합니다.
WM_DESTROY 리소스를 해제합니다.
WM_ENABLE 트랙바 창을 다시 그립니다.
WM_ERASEBKGND 트랙바의 현재 배경색을 사용하여 창 배경을 지웁니다.
WM_GETDLGCODE DLGC_WANTARROWS 값을 반환합니다.
WM_KEYDOWN 방향 키를 처리하고 TB_TOP, TB_BOTTOM, TB_PAGEUP, TB_PAGEDOWN, TB_LINEUP 및 TB_LINEDOWN 알림 코드를 적절하게 보냅니다.
WM_KEYUP 키가 방향 키 중 하나인 경우 TB_ENDTRACK 알림 코드를 보냅니다.
WM_KILLFOCUS 트랙바 창을 다시 그립니다.
WM_LBUTTONDOWN 포커스와 마우스 캡처를 트랙바로 설정합니다. 필요한 경우 사용자가 창에서 마우스 단추를 누를 때 슬라이더가 마우스 커서쪽으로 얼마나 빨리 이동하는지 결정하는 타이머를 설정합니다.
WM_LBUTTONUP 마우스 캡처를 해제하고 WM_LBUTTONDOWN 처리하는 동안 타이머가 설정된 경우 타이머를 종료합니다. 필요한 경우 TB_THUMBPOSITION 알림 코드를 보냅니다. 항상 TB_ENDTRACK 알림 코드를 보냅니다.
WM_MOUSEMOVE 마우스를 추적할 때 슬라이더를 이동하고 TB_THUMBTRACK 알림 코드를 보냅니다( WM_TIMER 참조).
WM_PAINT 트랙바를 그립니다. wParam 매개 변수가 NULL이 아닌 경우 컨트롤은 값이 HDC라고 가정하고 해당 디바이스 컨텍스트를 사용하여 그립니다.
WM_SETFOCUS 트랙바 창을 다시 그립니다.
WM_SIZE 표시할 공간이 충분하지 않은 경우 슬라이더를 제거하여 트랙바의 크기를 설정합니다.
WM_TIMER 마우스 위치를 검색하고 슬라이더의 위치를 업데이트합니다. (사용자가 슬라이더를 끌 때만 수신됩니다.)
WM_WININICHANGE 슬라이더 차원을 초기화합니다.

 

트랙바 도구 설명

TBS_TOOLTIPS 스타일로 만든 트랙바에는 기본 도구 설명 컨트롤이 있습니다. 도구 설명은 계속 표시되며 사용자가 마우스를 사용하여 슬라이더를 끌 때 현재 값을 표시합니다.

TBM_SETTOOLTIPS 메시지를 보내 트랙 표시줄에 새 도구 설명 컨트롤을 할당할 수 있습니다. 할당된 도구 설명 컨트롤에 대한 핸들을 검색하려면 TBM_GETTOOLTIPS 메시지를 사용합니다.