스크롤 바
스크롤 바 컨트롤은 슬라이딩 스크롤 상자가 들어 있고 양 끝에 방향 화살표가 있는 직사각형입니다. 스크롤 상자와 방향 화살표 외에도 스크롤 바에는 하나 더 활동적인 부분이 있습니다: 소위 회색 영역 (스크롤 상자와 화살표 사이의 두 직사각형) 사용자는 방향 화살표 또는 회색 영역의 어느 곳에서나 마우스를 클릭하거나 스크롤 상자를 추적하여 스크롤 상자의 현재 위치를 수정할 수 있습니다. 방향 화살표를 클릭하면 컨트롤 값이 1만큼 수정되는 반면, 회색 영역의 클릭은 1페이지만큼 수정됩니다. (설명 참조) Windows에서 스크롤 바는 키보드 포커스를 가질 수 있습니다. 스크롤 바가 포커스되면 스크롤 상자가 깜박이며 사용자가 Home, End, PageUp, PageDown 및 화살표 키를 눌러 컨트롤 값을 수정할 수 있습니다.
스크롤 바는 범위 및 현재 위치를 갖습니다. 범위는 컨트롤에 대한 최소 및 최대 위치 값을 나타냅니다. 이러한 값은 short integer로 표현되기 때문에 가능한 가장 높은 범위와 현재 위치 값은 SHRT_MAX입니다. 컨트롤 자체는 스크롤 박스의 픽셀 위치를 결정하기 위해 범위 및 현재 값을 사용합니다.
2개의 기본 타입의 스크롤 바가 있습니다: 수평 및 수직 스크롤 바. 당신이 스크롤 바를 생성할 때, DG는 지정된 수평 및 수직 크기에 따라 방향을 자동으로 결정합니다. 수평 크기가 수직 크기보다 크면 DG는 수평 스크롤 바를 작성합니다. 반대의 경우 DG는 수직 스크롤 바를 작성합니다.
스크롤 바는 일반적으로 내용이 경계를 넘어 확장되는 유저 아이템에 부착되어야 합니다. 수평 스크롤 바는 사용자가 유저 아이템의 내용을 왼쪽 또는 오른쪽으로 스크롤할 수 있게 해줍니다. 수직 스크롤 바는 사용자가 내용를 위아래로 스크롤할 수 있게 해줍니다. 또한, 스크롤 바는 다이얼로그 내의 어느 곳에나 위치될 수 있고, 필요할 때마다 현재 위치의 아날로그 표현을 제공하기 위해 사용될 수 있습니다. 그러나 이러한 상황에서 슬라이더 바를 사용하는 것이 스크롤 바를 사용하는 것보다 더 나은 대안이 됩니다.
DG(Edit 컨트롤, 리스트 박스, 리스트 뷰, 트리 뷰)의 일부 컨트롤에는 컨트롤의 일부이며 DG가 내부적으로 처리하는 스크롤 바가 내장되어 있다는 점에 유의하십시오. 이 스크롤 바들은 일반적으로 비활성화되지만 컨트롤이 모든 내용을 표시할만큼 크지 않으면 활성화됩니다. 위에서 언급한 컨트롤에는 별도의 스크롤 막대를 부착해서는 안 됩니다.
항목 타입
- DG_ITM_SCROLLBAR
서브 타입
-
서브 타입 의미 DG_SB_NORMAL 일반 스크롤 바입니다. DG_SB_PROPORTIONAL 페이지 크기가 변경되면 스크롤 상자 크기가 자동으로 변경됩니다.
Flag
-
값 의미 DG_SB_NONFOCUSABLE 만약 세트되면, 스크롤 바 항목은 키보드 포커스를 갖지 않게 됩니다. DG_SB_NOAUTOSCROLL 만약 세트되면, 스크롤 바는 DG_TSM_THUMBTRACK 서브-메시지만 처리합니다. 다른 서브 메시지들은 다이얼로그 콜백 함수에 의해 처리되어야 합니다. 그래서 애플리케이션은 이벤트에 따라 스크롤 상자를 이동시킬 책임이 있습니다. 만약 세트되지 않으면 서브-메시지는 항상 DG_TSM_TRACKING입니다. 그리고 스크롤 상자는 자동으로 이동하게 됩니다.
GRC 사양
ScrollBar x y dx dy pageSize min max [styleFlag]
여기서 x와 y는 스크롤 바의 좌상단 코너의 픽셀 좌표입니다. dx와 dy는 컨트롤의 너비와 높이의 픽셀 크기입니다. pageSize는 스크롤 바의 페이지 크기를 정의힙나다. (자세한 것은 설명을 보십시오) min과 max는 스크롤 바의 초기 범위를 지정합니다. 선택적인 styleFlag 파라미터는 proportional flag, focusable flag, autoscroll flag를 OR(|)로 조합할 수 있습니다.
Proportional flag의 가능한 값은 다음과 같습니다:
-
값 의미 Normal 일반 스크롤 바입니다. Proportional 하지 않습니다. Proportional Proportional 스크롤 바입니다. 페이지 크기가 변경되면 스크롤 상자 크기가 자동으로 바뀝니다.
Focusable flag의 가능한 값은 다음과 같습니다:
-
값 의미 Focusable 스크롤 바가 키보드 포커스를 가질 수 있습니다. NonFocusable 스크롤 바는 키보드 포커스를 가질 수 없습니다.
Autoscroll flag의 가능한 값은 다음과 같습니다:
-
값 의미 AutoScroll 스크롤 바는 스크롤 바 지정 이벤트 자체를 처리하고, 다이얼로그 콜백 함수는 시작, 마무리, 추적 중에만 통보를 받습니다. NoAutoScroll 스크롤 바는 DG_TSM_THUMBTRACK 서브-메시지만 처리하고, 다른 서브-메시지는 다이얼로그 콜백 함수로 처리해야 하므로 애플리케이션은 이벤트에 따라 스크롤 상자를 이동시킬 책임이 있습니다.
메시지
-
메시지 의미 DG_MSG_CHANGE 스크롤 박스의 위치가 변경되었습니다. 메시지 데이터 파라미터는 예전 위치를 포함하고 있습니다. DG_MSG_TRACK 스크롤 박스의 위치가 추적하는 동안 변경되었습니다. 메시지 데이터 파라미터는 서브-메시지입니다.
수정 Flag
DGSetItemValLong, DGSetItemMinLong 그리고 DGSetItemMaxLong 함수들은 다이얼로그 콜백 함수에서 DG_MSG_INIT 메시지를 처리할 때 호출되는 경우를 제외하고 스크롤 바의 수정 flag를 세트할 수 있습니다. flag 또한 DG_MSG_CHANGE 또는 DG_MSG_TRACK 메시지들을 생성하는 사용자 액션에 의해 세트될 수 있습니다. 수정 flag의 상태를 가져오거나 리셋(지우기)하려면 DGModified 또는 DGResetModified를 사용하십시오.
설명
스크롤 바의 범위는 GRC에서만 지정할 수 있습니다. DGSetItemMinLong와 DGSetItemMaxLong 함수를 사용하여 범위를 동적으로 변경할 수 있습니다. 가능한 최소 범위는 0이고 최대 범위는 SHRT_MAX입니다. DGGetItemMinLong과 DGGetItemMaxLong을 사용하여 스크롤 바의 범위를 가져오십시오. 현재 값은 DGSetItemValLong과 DGGetItemValLong으로 각각 세트하고 가져올 수 있습니다.
만약 범위 또는 값 설정 함수 중 하나를 호출하면, DG는 데이터의 일관성을 확인합니다. (즉 minimum <= value <= maximum 조건이 참인지 아닌지) 만약 데이터가 일관성이 없으면 DG가 자동으로 조정합니다. 이 조정에 대한 자세한 내용은 DGSetItemValLong, DGSetItemMinLong, DGSetItemMaxLong을 참조하십시오.
스크롤 상자의 위치는 최소값 및 최대값에 기반하여 현재 값으로부터 도출됩니다. 상대 위치는 다음 공식을 사용하여 계산됩니다: relative position = (value - minimum) / (maximum - minimum). Window에서 만약 최소값과 최대값이 같으면 스크롤 상자가 컨트롤의 시작 부분에 배치됩니다. 그러나 Macintosh에서는 이 경우 스크롤 바가 비활성화됩니다.
만약 사용자가 스크롤 상자를 클릭하여 추적하거나, 화살표 중 하나 또는 컨트롤의 회색 영역에서 (왼쪽) 마우스 버튼을 클릭한 채로 유지하거나, 스크롤 바가 키보드 포커스를 가질 때 방향 키 중 하나를 누른 채로 유지하고 있으면, DG는 사용자가 (왼쪽) 마우스 버튼 또는 누른 키를 해제할 때까지 DG_MSG_TRACK 메시지를 다이얼로그 콜백 함수로 보냅니다. DG_MSG_TRACK 메시지와 함께 서브-메시지도 전달되며, 이 메시지는 스크롤 바 이벤트를 더 상세하게 지정합니다. 이렇게 하면 애플리케이션이 추적 중에 다른 컨트롤들을 수정할 수 있습니다. DG_MSG_TRACK 메시지를 처리할 때 DGGetItemValLong을 호출하여 스크롤 바의 현재 값을 가져오십시오. 추적이 끝나자마자 콜백 함수는 DG_MSG_CHANGE 메시지를 수신합니다; 메시지 데이터 파라미터는 추적하기 전에 스크롤 상자 위치를 의미합니다. 모든 DG_MSG_CHANGE 메시지는 적어도 하나의 DG_MSG_TRACK 메시지가 선행된다는 점에 유의하십시오.
사용자가 스크롤 바의 회색 영역을 클릭하거나, 스크롤 바가 키보드 포커스를 갖는 동안 Windows에서 PageUp 또는 PageDown 키를 누를 때, 스크롤 상자 위치는 페이지 크기의 값에 의해 수정됩니다. 페이지 크기는 GRC로부터 초기화됩니다.
만약 당신이 페이지 크기를 특정 값으로 설정하려면 DGScrollBarSetPageSize를 사용하십시오. 현재 페이지 크기를 가져오려면 DGScrollBarGetPageSize를 사용하십시오.
요구사항
- 버전: DG 2.0.0 또는 이후
- 헤더: DG.h
참고사항
다이얼로그 항목 타입, Edit 컨트롤, 리스트 박스, 리스트 뷰, 슬라이더 바, 트리 뷰, 유저 아이템
DGGetItemMaxLong, DGGetItemMinLong, DGGetItemValLong, DGModified, DGResetModified, DGSetItemMaxLong, DGSetItemMinLong, DGSetItemValLong, DGScrollBarGetPageSize, DGScrollBarSetPageSize, 콜백 함수
DG_MSG_CHANGE, DG_MSG_INIT, DG_MSG_TRACK