트리 뷰
트리 뷰 컨트롤은 라벨이 붙은 항목들을 계층적으로 표시합니다. 계층의 최상위 항목을 root라고 합니다. 만약 계층에서 어떤 항목이 아래에 다른 항목들을 갖고 있다면, 상위 항목을 가리켜 parent라고 합니다. parent들에게 종속된 항목들을 children이라고 합니다. Child 항목들이 표시되면 Parent 항목 아래에서 들여쓰기 식으로 나타납니다. Child 항목들을 표시하거나 감추기 위해 아무 레벨에서나 계층을 확장/축소할 수 있습니다. Windows에서는 모든 Parent 항목 옆에 플러스(+) 또는 마이너스(-) 버튼이 있습니다. 사용자는 버튼을 클릭하여 Parent 항목의 Child 항목 리스트를 확장/축소할 수 있습니다. Macintosh에서는 오른쪽 및 아래쪽 화살표 아이콘들이 동일한 역할을 합니다.
트리 뷰 항목은 항목 텍스트(라벨)를 가지고 있으며 2가지 타입의 아이콘을 가질 수 있습니다: 상태 아이콘 및 일반 아이콘. 아이콘들은 항상 항목 텍스트의 왼쪽에 있습니다. 만약 트리 뷰가 2가지 타입 아이콘을 모두 갖고 있다면, 상태 아이콘은 가장 왼쪽에 있습니다.
항목 타입
- DG_ITM_TREEVIEW
서브 타입
-
서브 타입 의미 DG_TVT_SINGLESELECT 단 1개만 선택 가능합니다. DG_TVT_MULTISELECT 다중 선택이 가능합니다.
Flag
-
값 의미 DG_TVT_LABELEDIT 트리 뷰 항목 라벨들을 사용자가 편집할 수 있습니다. DG_TVT_DRAGDROP 트리 뷰가 트리 뷰 자체 안에서의 드래그 앤 드롭을 처리합니다. Windows 전용:
DG_TVT_ROOTBUTTON 만약 이 flag를 지정하면, Root 항목이 플러스(+) 또는 마이너스(-) 버튼을 갖습니다.
GRC 사양
SingleSelTreeView x y dx dy fontSpec niWidth niHeight siWidth siHeight editable dragable maxChCount [noRootButton] MultiSelTreeView x y dx dy fontSpec niWidth niHeight siWidth siHeight editable dragable maxChCount [noRootButton]
x와 y는 트리 뷰의 좌상단 코너의 픽셀 좌표입니다. dx와 dy는 컨트롤의 너비와 높이의 픽셀 크기입니다. fontSpec은 항목 라벨들의 글꼴 크기와 스타일을 선언합니다. niWidth, niHeight와 siWidth, siHeight는 각각 일반 및 상태 아이콘들의 너비와 높이의 픽셀 크기입니다. editable과 dragable flag는 항목 라벨들이 편집 가능한지, 그리고 드래그 앤 드롭 기능이 활성화되어 있는지 여부를 정의합니다. Windows에서 만약 선택적인 noRootButton flag가 존재하면, Root 항목은 플러스(+) 또는 마이너스(-) 버튼을 갖지 않습니다.
fontSpec의 가능한 값은 다음과 같습니다:
-
값 DGSetItemFont에서 사용되는 DG 상수 조합입니다. ExtraSmall DG_IS_EXTRASMALL SmallPlain DG_IS_SMALL | DG_IS_PLAIN SmallBold DG_IS_SMALL | DG_IS_BOLD SmallItalic DG_IS_SMALL | DG_IS_ITALIC SmallUnderline DG_IS_SMALL | DG_IS_UNDERLINE LargePlain DG_IS_LARGE | DG_IS_PLAIN LargeBold DG_IS_LARGE | DG_IS_BOLD LargeItalic DG_IS_LARGE | DG_IS_ITALIC LargeUnderline DG_IS_LARGE | DG_IS_UNDERLINE
editable의 가능한 값은 다음과 같습니다:
-
값 의미 labelEdit DG_TVT_LABELEDIT flag가 세트되었습니다. noLabelEdit DG_TVT_LABELEDIT flag가 세트되지 않았습니다.
dragable의 가능한 값은 다음과 같습니다:
-
값 의미 dragDrop DG_TVT_DRAGDROP flag가 세트되었습니다. noDragDrop DG_TVT_DRAGDROP flag가 세트되지 않았습니다.
메시지
-
메시지 의미 DG_MSG_CLICK 트리 항목의 상태 아이콘을 클릭했습니다. 메시지 데이터는 트리 항목 ID를 포함하고 있습니다. 만약 다이얼로그 콜백 함수가 1을 리턴하면, 예전 선택이 유지되고 클릭 이벤트의 추가 처리가 생략됩니다. DG_MSG_CHANGE 트리 뷰 항목이 사용자에 의해 편집되거나 드래그되거나 트리 뷰에서 새로운 항목(들)이 선택되었습니다. 메시지 데이터 파라미터는 변경을 일으키는 사용자 액션에 대한 정보를 포함하는 DGTreeViewChangeData structure에 대한 포인터입니다. DG_MSG_FOCUS 트리 뷰가 키보드 포커스를 얻거나 잃었습니다. 메시지 데이터는 각각 1 또는 0입니다. DG_MSG_DRAGDROP 드래그 앤 드롭 관련 이벤트가 발생했습니다. 이 메시지는 DGEnableMessage로 활성화된 후에만 올 수 있습니다. 트리 뷰들은 드래그 소스 또는 드래그 대상 어느 쪽이라도 될 수 있습니다.
수정 Flag
DGTreeViewSelectItem과 DGTreeViewDeselectItem 함수들은 다이얼로그 콜백 함수에서 DG_MSG_INIT 메시지를 처리할 때 호출되는 경우를 제외하고 트리 뷰의 수정 flag를 세트합니다. flag는 또한 트리 뷰 내 선택을 변경하고 DG_MSG_CHANGE 메시지를 발생시키는 사용자 액션에 의해서도 세트될 수 있습니다. 수정 flag를 가져오거나 리셋(지우기)하려면 DGModified 또는 DGResetModified를 사용하십시오.
설명
트리 뷰 내 계층에 항목들을 삽입하려면 DGTreeViewInsertItem을 호출하고, 제거하려면 DGTreeViewDeleteItem을 호출하십시오. DGTreeViewGetItemCount로 트리 뷰 내 현재 항목들의 수를 가져올 수 있습니다. 항목 계층은 사용자 액션뿐만 아니라 프로그램 코드를 통해서도 확장/축소할 수 있습니다. Parent 항목의 Children을 표시하거나 숨기려면 DGTreeViewExpandItem 또는 DGTreeViewCollapseItem을 사용하십시오. 트리 뷰 항목이 확장/축소되었는지를 테스트하려면 DGTreeViewIsItemExpanded를 호출하십시오. DGTreeViewGetItem으로 지정한 트리 뷰 항목의 ID를 가져올 수 있습니다. 이 함수는 또한 트리 뷰 항목들을 열거하고 그것들의 다른 정보(예를 들면, 트리 항목이 Parent인지 아닌지)를 가져오는 데 유용합니다. 트리 뷰 항목은 마우스 위치로부터만 아니라 DGTreeViewGetItemFromPosition 함수를 통해서도 가져올 수 있습니다.
트리 뷰 항목은 2가지 타입의 아이콘을 가질 수 있습니다: 상태 아이콘과 일반 아이콘. 양 타입의 아이콘들은 DGTreeViewSetItemIconId / DGTreeViewSetItemIcon, 그리고 DGTreeViewGetItemIconId / DGTreeViewGetItemIcon으로 각각 세트하고 가져올 수 있습니다. DGTreeViewSetItemIconId와 DGTreeViewGetItemIconId는 iconType 파라미터에 따라 아이콘의 리소스 ID를 사용합니다. 반면 DGTreeViewSetItemIcon과 DGTreeViewGetItemIcon은 아이콘 설명 데이터를 사용합니다. 아이콘 설명 데이터는 NSImage* (MAC 전용) 또는 HICON (WIN 전용)으로 참조됩니다.
트리 뷰 내 상태 아이콘들의 수는 최대 12개까지 가능합니다. 일반 아이콘들에 대한 제한은 없습니다. 만약 항목 아이콘이 DGTreeViewSetItemIconId로 세트되지 않았다면, 항목의 내용을 왼쪽으로 이동시키지 않고 아이콘 영역이 빈 채로 표시됩니다. 리소스나 DGTreeViewSetIconSize를 호출하여 아이콘 크기를 0으로 설정함으로써 아무 타입의 아이콘이든 생략할 수 있습니다. 이 설정들은 전체 트리 뷰에 적용됩니다. 즉, 모든 트리 항목들입니다. 현재 아이콘 크기 설정은 DGTreeViewGetIconSize로 가져올 수 있습니다.
DGTreeViewSetItemText와 DGTreeViewGetItemText는 트리 뷰 항목들의 텍스트를 세트하고 가져오는 역할을 합니다. 텍스트 스타일, 텍스트 컬러 및 각 트리 뷰 항목의 상태는 DGTreeViewSetItemStyle, DGTreeViewSetItemColor, DGTreeViewSetItemStatus를 통해 각각 변경될 수 있습니다. 이 트리 뷰 항목 프로퍼티들을 가져오려면 DGTreeViewGetItemStyle, DGTreeViewGetItemColor, DGTreeViewGetItemStatus를 각각 사용하십시오. 각 트리 뷰 항목은 사용자 정의 값을 가질 수 있습니다. 이것은 아무 항목 지정 사용자 데이터를 저장하는 데 사용될 수 있습니다. DGTreeViewSetItemUserData와 DGTreeViewGetItemUserData는 이 값에 접근할 수 있게 해줍니다.
트리 뷰 지정 함수들을 호출하여 더 많은 트리 뷰 항목들이 삽입되거나, 제거되거나, 그것들의 여러 파라미터들(즉 텍스트, 컬러, 스타일, 상태 등)이 동시에 변경되면 원치 않는 스크린 업데이트를 막기 위해 이 함수 호출들을 DGTreeViewDisableDraw와 DGTreeViewEnableDraw로 감싸는 것을 권장합니다. DGTreeViewEnableDraw 자체는 트리 뷰를 업데이트하지 않습니다. 유효하지 않은 영역들을 다시 그리는 것은 애플리케이션의 책임입니다. 만약 전체 트리 뷰 대부분이 유효하지 않으면 업데이트를 하기 위해 DGInvalidateItem 또는 DGRedrawItem을 사용하십시오. 그러나 소수의 트리 뷰 항목들을 다시 그려야 할 때에는 DGTreeViewRedrawItem을 사용하십시오. 특정 트리 뷰 항목의 직사각형을 가져오려면 DGTreeViewGetItemRect를 호출하십시오. 이 함수는 또한 트리 뷰 항목이 보이는지 숨겨져 있는지 여부를 테스트 할 때에도 좋습니다.
트리 뷰 컨트롤은 단일 선택 또는 다중 선택이 될 수 있습니다. 사용자는 보통 방식대로 마우스나 키 누름을 통해 트리 뷰 항목들을 선택할 수 있습니다. 프로그램 코드를 통해 1개 이상의 트리 뷰 항목들을 선택 또는 선택 해제하려면 DGTreeViewSelectItem과 DGTreeViewDeselectItem을 각각 호출하십시오. 선택한 트리 뷰 항목들의 수를 가져오려면 DGTreeViewGetSelCount를 사용하시고, 항목들의 인덱스를 가져오려면 DGTreeViewGetSelected 또는 DGTreeViewGetSelItems를 사용하십시오. 트리 뷰의 빈 클라이언트 영역(트리 뷰 항목이 없는 곳)을 마우스로 클릭하면, 예전에 선택한 것들이 모두 해제됩니다. 이 경우 애플리케이션에게 알리기 위해 DG_MSG_CHANGE 메시지를 보냅니다.
다이얼로그 콜백 함수에서 DG_MSG_CHANGE 메시지를 처리할 때, DGTreeViewChangeData structure의 actionFlag 멤버는 트리 뷰 항목에 무슨 일이 생겼는지 알려줍니다. 가능한 값은 다음과 같습니다:
-
ActionFlag Action DG_TVCF_SELECTION 선택이 변경되었습니다. structure의 다른 멤버들은 0입니다. DG_TVCF_EDITBEGIN 라벨 편집이 시작되었습니다. structure의 treeItem 멤버는 현재 편집되는 트리 뷰 항목의 ID를 포함하고 있습니다. 다른 멤버들은 0입니다. DG_MSG_CHANGE 메시지를 처리할 때, 애플리케이션은 다이얼로그 콜백 함수에서 1을 리턴하여 편집 작업을 시작하기 전에 취소할 수 있습니다. DG_TVCF_EDITEND 라벨 편집이 완료되었습니다. DG_MSG_CHANGE 메시지를 처리할 때, 애플리케이션은 다이얼로그 콜백 함수에서 DG_TVCR_SETNEWTEXT를 리턴하여 새로운 텍스트를 받아들이거나, DG_TVCR_KEEPOLDTEXT를 리턴하여 원래 값으로 돌아가거나, DG_TVCR_EDITTEXT를 리턴하여 편집을 계속 진행할 수도 있습니다. DG_TVCF_EXPAND structure의 treeItem 멤버에 의해 주어진 Parent 트리 뷰 항목의 Child 항목 리스트가 확장됩니다. 다른 멤버들은 0입니다. DG_TVCF_COLLAPSE structure의 treeItem 멤버에 의해 주어진 Parent 트리 뷰 항목의 Child 항목 리스트가 축소됩니다. 다른 멤버들은 0입니다.
라벨 편집과 드래그 앤 드롭 기능은 각각 labelEdit 및 dragDrop flag를 통해 GRC에서만 활성화될 수 있습니다. 트리 뷰는 DG_TVT_LABELEDIT flag를 갖고 있는 경우에만 DG_MSG_CHANGE 메시지와 함께 DG_TVCF_EDITBEGIN 또는 DG_TVCF_EDITEND 액션 flag를 받을 수 있습니다.
트리 뷰는 DG의 포커스 가능한 컨트롤 중 하나입니다. 트리 뷰가 사용자 액션에 의해 키보드 포커스를 얻거나 잃을 때, 다이얼로그 콜백 함수는 DG_MSG_FOCUS 메시지를 받습니다. 트리 뷰에 대한 키보드 포커스는 프로그램 코드에서 DGSetFocus 함수를 이용하여 세트될 수 있습니다. 현재 키보드 포커스를 가지고 있는 컨트롤을 가져오려면 DGGetFocus를 사용하십시오.
DG에서 키보드 포커스와 포커스 가능한 컨트롤 카테고리는 본질적으로 Macintosh 운영체제에서와 동일한 의미를 갖고 있습니다. (즉, DG와 Macintosh에서 포커스 가능한 컨트롤들의 타입이 동일함) 그러나 Windows에서는 더 많은 컨트롤들이 키보드 포커스를 가질 수 있습니다. DG의 포커스 가능한 컨트롤들은 Windows에서 포커스 가능한 컨트롤들의 부분집합입니다. DGSetFocus와 DGGetFocus 함수들은 DG의 포커스 가능한 컨트롤들에서만 작동합니다.
키보드 포커스를 포커스 가능한 다이얼로그 항목으로 설정한 다음 Windows의 [F1] 키 또는 Macintosh의 [Help] 키를 누르거나 항목의 마우스 오른쪽 버튼을 클릭하거나 다이얼로그 캡션에 있는 도움말[?] 버튼을 클릭한 뒤 항목 자체를 클릭하여 항목의 자세한 도움말 정보를 호출할 수 있습니다. 만약 툴팁이 활성화되면 단축 도움말 정보가 평소와 같이 표시됩니다. 트리 뷰에 도움말 텍스트를 표시하는 방법은 2가지가 있습니다. 트리 뷰의 각 항목에 대해 도움말 텍스트를 표시하거나 트리 뷰에 도움말 텍스트를 하나만 표시할 수 있습니다. 트리 뷰의 도움말 스타일은 DGTreeViewSetHelpStyle과 DGTreeViewGetHelpStyle 함수로 각각 세트하거나 가져올 수 있습니다.
요구사항
- 버전: DG 2.2.0 또는 이후
- 헤더: DG.h
참고사항
다이얼로그 항목 타입, DGTreeViewChangeData
트리 뷰 지정 함수, DGGetFocus, DGInvalidateItem, DGModified. DGRedrawItem, DGResetModified, DGSetFocus, DGSetItemFont, 콜백 함수
DG_MSG_CLICK, DG_MSG_CHANGE, DG_MSG_FOCUS, DG_MSG_INIT