Tree-View 컨트롤 정보

트리 뷰 컨트롤은 문서의 제목, 인덱스의 항목 또는 디스크의 파일 및 디렉터리와 같은 항목의 계층적 목록을 표시하는 창입니다. 각 항목은 레이블과 선택적 비트맵 이미지로 구성되며 각 항목에는 연결된 하위 항목 목록이 있을 수 있습니다. 항목을 클릭하여 사용자는 연결된 하위 항목 목록을 확장하거나 축소할 수 있습니다.

다음 그림에서는 루트 노드, 확장된 노드 및 축소된 노드가 있는 간단한 트리 뷰 컨트롤을 보여 줍니다. 컨트롤은 선택한 항목에 대해 하나의 비트맵을 사용하고 다른 항목에는 다른 비트맵을 사용합니다.

screen shot showing five nodes in a hierarchy; the text of one node is selected, but nodes are not linked to each other by lines

트리 뷰 컨트롤을 만든 후에는 컨트롤에 메시지를 보내 항목을 추가, 제거, 정렬 또는 조작합니다. 각 메시지에는 메시지를 명시적으로 보내는 대신 사용할 수 있는 하나 이상의 해당 매크로가 있습니다.

이 섹션에서는 다음 항목에 대해 설명합니다.

Tree-View 스타일

트리 뷰 스타일은 트리 뷰 컨트롤의 모양 측면을 제어합니다. 트리 뷰 컨트롤을 만들 때 초기 스타일을 설정합니다. GetWindowLongSetWindowLong 함수를 사용하여 트리 뷰 컨트롤을 만든 후 스타일을 검색하고 변경할 수 있습니다.

TVS_HASLINES 스타일은 다음 그림과 같이 자식 항목을 부모 항목에 연결하는 선을 그려 트리 뷰 컨트롤의 계층 구조에 대한 그래픽 표현을 향상시킵니다.

screen shot showing the previous arrangement, but with lines joining the nodes; the first line descends from the root node

그 자체로 이 스타일은 계층 구조의 루트에 선을 그리지 않습니다. 이렇게 하려면 TVS_HASLINES 스타일과 TVS_LINESATROOT 스타일을 결합해야 합니다. 결과는 다음 그림에 나와 있습니다.

screen shot showing the previous arrangement, but with an additional horizontal line leading to the root node

사용자는 부모 항목을 두 번 클릭하여 부모 항목의 자식 항목 목록을 확장하거나 축소할 수 있습니다. TVS_HASBUTTONS 스타일이 있는 트리 뷰 컨트롤은 각 부모 항목의 왼쪽에 단추를 추가합니다. 사용자는 부모 항목을 두 번 클릭하는 대신 단추를 한 번 클릭하여 자식 항목을 확장하거나 축소할 수 있습니다. TVS_HASBUTTONS 계층의 루트에 있는 항목에 단추를 추가하지 않습니다. 이렇게 하려면 TVS_HASLINES, TVS_LINESATROOTTVS_HASBUTTONS 결합해야 합니다. 이 스타일 조합은 다음 그림에 나와 있습니다.

screen shot showing the previous arrangement, but with expand/collapse buttons at each vertex of two lines

TVS_CHECKBOXES 스타일은 각 항목 옆에 확인란을 만듭니다. 확인란 스타일을 사용하려면 트리 뷰 컨트롤을 만든 후 트리를 채우기 전에 TVS_CHECKBOXES 스타일( SetWindowLong 사용)을 설정해야 합니다. 그렇지 않으면 타이밍 문제에 따라 확인란이 선택되지 않은 상태로 나타날 수 있습니다. 다음 그림에서는 확인란 스타일을 보여 줍니다.

screen shot showing the previous arrangement, but with a checkbox next to each node; two of the checkboxes are selected

TVS_FULLROWSELECT 스타일을 사용하면 선택 영역 강조 표시가 항목 자체뿐만 아니라 컨트롤의 전체 너비로 확장됩니다. 다음 그림에서는 이 스타일을 보여 줍니다.

screen shot showing the original arrangement of five nodes with no lines, but the selection highlight extends the full width of the control

TVS_EDITLABELS 스타일을 사용하면 사용자가 트리 뷰 항목의 레이블을 편집할 수 있습니다. 레이블 편집에 대한 자세한 내용은 트리 뷰 레이블 편집을 참조하세요.

이러한 스타일 및 기타 스타일에 대한 자세한 내용은 트리 뷰 컨트롤 창 스타일을 참조하세요.

부모 및 자식 항목

트리 뷰 컨트롤의 모든 항목에는 하위 항목( 자식 항목이라고 함)의 목록이 연결되어 있을 수 있습니다. 하나 이상의 자식 항목이 있는 항목을 부모 항목이라고 합니다. 자식 항목은 부모 항목 아래에 표시되고 부모 항목에 종속됨을 나타내기 위해 들여쓰기됩니다. 부모가 없는 항목은 계층 구조의 맨 위에 나타나며 루트 항목이라고 합니다.

트리 뷰 컨트롤에 항목을 추가하려면 컨트롤에 TVM_INSERTITEM 메시지를 보냅니다. 메시지는 항목을 고유하게 식별하는 HTREEITEM 형식에 대한 핸들을 반환합니다. 항목을 추가할 때 새 항목의 부모 항목에 대한 핸들을 지정해야 합니다. TVINSERTSTRUCT 구조체에서 부모 항목 핸들 대신 NULL 또는 TVI_ROOT 값을 지정하면 항목이 루트 항목으로 추가됩니다.

언제든지 부모 항목의 자식 항목 목록 상태가 확장되거나 축소될 수 있습니다. 상태가 확장되면 자식 항목이 부모 항목 아래에 표시됩니다. 축소되면 자식 항목이 표시되지 않습니다. 사용자가 부모 항목을 두 번 클릭하거나 부모가 TVS_HASBUTTONS 스타일을 사용하는 경우 사용자가 부모 항목과 연결된 단추를 클릭하면 목록이 확장된 상태와 축소된 상태 간에 자동으로 전환됩니다. 애플리케이션은 TVM_EXPAND 메시지를 사용하여 자식 항목을 확장하거나 축소할 수 있습니다.

트리 뷰 컨트롤은 부모 항목의 자식 항목 목록을 확장하거나 축소하려고 할 때 부모 창에 TVN_ITEMEXPANDING 알림 메시지를 보냅니다. 이 알림은 애플리케이션에 변경을 방지하거나 자식 항목 목록의 상태에 따라 부모 항목의 특성을 설정할 수 있는 기회를 제공합니다. 목록의 상태를 변경한 후 트리 뷰 컨트롤은 부모 창에 TVN_ITEMEXPANDED 알림 메시지를 보냅니다.

자식 항목 목록이 확장되면 부모 항목을 기준으로 들여쓰기됩니다. TVM_SETINDENT 메시지를 사용하여 들여쓰기 양을 설정하거나 TVM_GETINDENT메시지를 사용하여 현재 양을 검색할 수 있습니다.

트리 뷰 컨트롤은 트리 뷰 컨트롤을 만드는 프로세스의 힙에서 할당된 메모리를 사용합니다. 트리 뷰의 최대 항목 수는 힙에서 사용할 수 있는 메모리 양을 기반으로 합니다.

항목 레이블

일반적으로 트리 뷰 컨트롤에 항목을 추가할 때 항목 레이블의 텍스트를 지정합니다. TVM_INSERTITEM 메시지에는 레이블의 텍스트가 포함된 문자열을 포함하여 항목의 속성을 정의하는 TVITEM 구조가 포함되어 있습니다.

트리 뷰 컨트롤은 각 항목을 저장하기 위한 메모리를 할당합니다. 항목 레이블의 텍스트는 이 메모리의 상당 부분을 차지합니다. 애플리케이션이 트리 뷰 컨트롤에서 문자열의 복사본을 유지 관리하는 경우 실제 문자열을 트리 뷰에 전달하는 대신 TVITEMpszText 멤버에 LPSTR_TEXTCALLBACK 값을 지정하여 컨트롤의 메모리 요구 사항을 줄일 수 있습니다. LPSTR_TEXTCALLBACK 사용하면 트리 뷰 컨트롤이 항목을 다시 그려야 할 때마다 부모 창에서 항목의 레이블 텍스트를 검색합니다. 텍스트를 검색하기 위해 트리 뷰 컨트롤은 NMTVDISPINFO 구조체의 주소를 포함하는 TVN_GETDISPINFO 알림 메시지를 보냅니다. 부모 창은 포함된 구조체의 적절한 멤버를 채워야 합니다.

Tree-View 레이블 편집

사용자는 TVS_EDITLABELS 스타일이 있는 트리 뷰 컨트롤에서 항목의 레이블을 직접 편집할 수 있습니다. 사용자가 포커스가 있는 항목의 레이블을 클릭하여 편집을 시작합니다. 애플리케이션은 TVM_EDITLABEL 메시지를 사용하여 편집을 시작합니다. 트리 뷰 컨트롤은 편집이 시작되고 취소되거나 완료될 때 부모 창에 알립니다. 편집이 완료되면 부모 창은 해당하는 경우 항목의 레이블을 업데이트해야 합니다.

레이블 편집이 시작되면 트리 뷰 컨트롤은 부모 창에 TVN_BEGINLABELEDIT 알림 메시지를 보냅니다. 이 알림을 처리하면 애플리케이션에서 일부 레이블을 편집하고 다른 레이블을 편집하지 못하게 할 수 있습니다. 0을 반환하면 편집할 수 있으며 0이 아닌 값을 반환하면 편집할 수 없습니다.

레이블 편집이 취소되거나 완료되면 트리 뷰 컨트롤이 부모 창에 TVN_ENDLABELEDIT 알림 메시지를 보냅니다. lParam 매개 변수는 NMTVDISPINFO 구조체의 주소입니다. 항목 매개 변수는 항목을 식별하고 편집된 텍스트를 포함하는 TVITEM 구조체입니다. 부모 창은 새 레이블을 유지하려는 경우 항목의 레이블을 업데이트해야 합니다. 편집이 취소된 경우 TVITEMpszText 멤버는 0입니다.

레이블을 편집하는 동안 일반적으로 TVN_BEGINLABELEDIT 알림 메시지에 대한 응답으로 TVM_GETEDITCONTROL메시지를 사용하여 레이블 편집에 사용되는 편집 컨트롤에 대한 핸들을 검색할 수 있습니다. 편집 컨트롤에 EM_SETLIMITTEXT 메시지를 보내 사용자가 편집 컨트롤을 입력하거나 서브클래스하여 잘못된 문자를 가로채고 삭제할 수 있는 텍스트의 양을 제한할 수 있습니다. 그러나 편집 컨트롤은 TVN_BEGINLABELEDIT 전송된 후에 만 표시됩니다.

항목 위치 Tree-View

항목의 초기 위치는 TVM_INSERTITEM 메시지를 사용하여 항목이 트리 뷰 컨트롤에 추가되면 설정됩니다. 메시지에는 부모 항목에 대한 핸들과 새 항목을 삽입할 항목에 대한 핸들을 지정하는 TVINSERTSTRUCT 구조체가 포함되어 있습니다. 두 번째 핸들은 지정된 부모의 자식 항목 또는 TVI_FIRST, TVI_LAST 또는 TVI_SORT 값 중 하나를 식별해야 합니다.

TVI_FIRST 또는 TVI_LAST 지정하면 트리 뷰 컨트롤은 지정된 부모 항목의 자식 항목 목록의 시작 또는 끝에 새 항목을 배치합니다. TVI_SORT 지정하면 트리 뷰 컨트롤은 항목 레이블의 텍스트에 따라 자식 항목 목록에 새 항목을 사전순으로 삽입합니다.

TVM_SORTCHILDREN 메시지를 사용하여 부모 항목의 자식 항목 목록을 사전순으로 배치할 수 있습니다. 메시지에는 지정된 부모 항목에서 내림차순으로 내림차순으로 하위 항목의 모든 수준을 정렬할지 여부를 지정하는 매개 변수가 포함됩니다.

TVM_SORTCHILDRENCB 메시지를 사용하면 정의한 조건에 따라 자식 항목을 정렬할 수 있습니다. 이 메시지를 사용하는 경우 트리 뷰 컨트롤이 두 자식 항목의 상대 순서를 결정해야 할 때마다 호출할 수 있는 애플리케이션 정의 콜백 함수를 지정합니다. 콜백 함수는 비교할 항목에 대해 두 개의 32비트 애플리케이션 정의 값과 TVM_SORTCHILDRENCB 보낼 때 지정하는 세 번째 32비트 값을 받습니다.

Tree-View 항목 상태 개요

트리 뷰 컨트롤의 각 항목에는 현재 상태가 있습니다. 각 항목의 상태 정보에는 항목의 상태 이미지 및 오버레이 이미지를 나타내는 이미지 목록 인덱스뿐만 아니라 비트 플래그 집합이 포함됩니다. 비트 플래그는 항목이 선택, 사용 안 함, 확장 등인지 여부를 나타냅니다. 대부분의 경우 트리 뷰 컨트롤은 항목 선택과 같은 사용자 작업을 반영하도록 항목의 상태를 자동으로 설정합니다. 그러나 TVM_SETITEM 메시지를 사용하여 항목의 상태를 설정할 수도 있으며 TVM_GETITEM 메시지를 사용하여 항목의 현재 상태를 검색할 수도 있습니다. 항목 상태의 전체 목록은 트리 뷰 컨트롤 항목 상태를 참조하세요.

항목의 현재 상태는 TVITEM 구조체의 상태 멤버에 의해 지정됩니다. 트리 뷰 컨트롤은 항목 선택 또는 항목에 포커스 설정과 같은 사용자 작업을 반영하도록 항목의 상태를 변경할 수 있습니다. 또한 애플리케이션은 항목을 사용하지 않도록 설정하거나 숨기거나 오버레이 이미지 또는 상태 이미지를 지정하도록 항목의 상태를 변경할 수 있습니다.

항목의 상태를 지정하거나 변경할 때 TVITEMstatemask 멤버는 설정할 상태 비트를 지정하고 상태 멤버는 해당 비트에 대한 새 값을 포함합니다.

항목의 오버레이 이미지를 설정하려면 statemaskTVIS_OVERLAYMASK 값이 포함되어야 하며, STATEINDEXTOOVERLAYMASK 매크로를 사용하여 왼쪽 8비트 이동된 오버레이 이미지의 1부터 시작하는 인덱스를 포함해야 합니다. 인덱스가 0이면 오버레이 이미지를 지정할 수 없습니다.

상태 이미지는 애플리케이션 정의 상태를 나타내기 위해 항목의 아이콘 옆에 표시됩니다. 상태 이미지는 TVM_SETIMAGELIST 메시지를 전송하여 지정된 상태 이미지 목록에 포함됩니다. 항목의 상태 이미지를 설정하려면 TVITEM 구조체의 상태 마스크 멤버에 TVIS_STATEIMAGEMASK 값을 포함합니다. 구조체 상태 멤버의 비트 12~15는 그릴 이미지의 상태 이미지 목록에서 인덱스를 지정합니다.

상태 이미지 인덱스를 설정하려면 INDEXTOSTATEIMAGEMASK를 사용합니다. 이 매크로는 인덱스를 사용하고 비트 12~15를 적절하게 설정합니다. 항목에 상태 이미지가 없음을 나타내려면 인덱스 0으로 설정합니다. 이 규칙은 상태 이미지 목록의 이미지 0을 상태 이미지로 사용할 수 없음을 의미합니다. 상태 멤버의 비트 12~15를 격리하려면 TVIS_STATEIMAGEMASK 마스크를 사용합니다. 오버레이 및 상태 이미지에 대한 자세한 내용은 트리 뷰 이미지 목록을 참조하세요.

항목 선택

트리 뷰 컨트롤은 TVN_SELCHANGING 보내고 알림 메시지를TVN_SELCHANGED 선택 항목이 한 항목에서 다른 항목으로 변경되는 경우 부모 창에 알립니다. 두 알림 모두 변경 내용이 마우스 클릭 또는 키 입력의 결과인지 여부를 지정하는 값을 포함합니다. 알림에는 선택 영역을 가져오는 항목과 선택 영역이 손실되는 항목에 대한 정보도 포함됩니다. 이 정보를 사용하여 항목의 선택 상태에 따라 항목 특성을 설정할 수 있습니다. TVN_SELCHANGING 대한 응답으로 TRUE 를 반환하면 선택 영역이 변경되지 않으며 FALSE 를 반환하면 변경이 허용됩니다.

애플리케이션은 TVM_SELECTITEM 메시지를 전송하여 선택을 변경할 수 있습니다.

항목 정보

트리 뷰 컨트롤은 컨트롤의 항목에 대한 정보를 검색하는 여러 메시지를 지원합니다.

TVM_GETITEM 메시지는 항목의 핸들 및 특성을 검색할 수 있습니다. 항목의 특성에는 현재 상태, 선택한 항목 및 선택되지 않은 비트맵 이미지의 컨트롤 이미지 목록의 인덱스, 항목에 자식 항목이 있는지 여부를 나타내는 플래그, 항목의 레이블 문자열 주소 및 항목의 애플리케이션 정의 32비트 값이 포함됩니다.

TVM_GETNEXTITEM 메시지는 현재 항목에 대해 지정된 관계를 포함하는 트리 뷰 항목을 검색합니다. 메시지는 항목의 부모, 다음 또는 이전에 표시되는 항목, 첫 번째 자식 항목 등을 검색할 수 있습니다.

TVM_GETITEMRECT 메시지는 트리 뷰 항목에 대한 경계 사각형을 검색합니다. TVM_GETCOUNTTVM_GETVISIBLECOUNT 메시지는 트리 뷰 컨트롤의 항목 수와 트리 뷰 컨트롤의 창에 완전히 표시될 수 있는 항목 수를 각각 검색합니다. TVM_ENSUREVISIBLE 메시지를 사용하여 특정 항목이 표시되는지 확인할 수 있습니다.

이미지 목록 Tree-View

트리 뷰 컨트롤의 각 항목에는 4개의 비트맵 이미지가 연결되어 있을 수 있습니다.

  • 항목을 선택할 때 표시되는 열린 폴더와 같은 이미지입니다.
  • 항목을 선택하지 않을 때 표시되는 닫힌 폴더와 같은 이미지입니다.
  • 선택한 이미지나 선택되지 않은 이미지 위에 투명하게 그려지는 오버레이 이미지입니다.
  • 선택한 이미지 또는 선택되지 않은 이미지의 왼쪽에 표시되는 추가 이미지인 상태 이미지입니다. 확인란 및 선택 취소된 확인란과 같은 상태 이미지를 사용하여 애플리케이션 정의 항목 상태를 나타낼 수 있습니다.

기본적으로 트리 뷰 컨트롤은 항목 이미지를 표시하지 않습니다. 항목 이미지를 표시하려면 이미지 목록을 만들고 컨트롤과 연결해야 합니다. 이미지 목록에 대한 자세한 내용은 이미지 목록을 참조하세요.

트리 뷰 컨트롤에는 일반 이미지 목록과 상태 이미지 목록이라는 두 개의 이미지 목록이 있을 수 있습니다. 일반 이미지 목록에는 선택한 이미지, 선택되지 않은 이미지 및 오버레이 이미지가 저장됩니다. 상태 이미지 목록은 상태 이미지를 저장합니다. ImageList_Create 함수를 사용하여 이미지 목록을 만들고 다른 이미지 목록 함수를 사용하여 이미지 목록에 비트맵을 추가합니다. 그런 다음 이미지 목록을 트리 뷰 컨트롤과 연결하려면 TVM_SETIMAGELIST 메시지를 사용합니다. TVM_GETIMAGELIST 메시지는 트리 뷰 컨트롤의 이미지 목록 중 하나에 대한 핸들을 검색합니다. 이 메시지는 목록에 이미지를 더 추가해야 하는 경우에 유용합니다.

선택한 이미지와 선택되지 않은 이미지 외에도 트리 뷰 컨트롤의 일반 이미지 목록에는 최대 4개의 오버레이 이미지가 포함될 수 있습니다. 오버레이 이미지는 1 기반 인덱스로 식별되며 선택한 이미지와 선택되지 않은 이미지 위에 투명하게 그려지도록 설계되었습니다. 일반 이미지 목록의 이미지에 오버레이 마스크 인덱스 할당하려면 ImageList_SetOverlayImage 함수를 호출합니다.

기본적으로 모든 항목은 선택한 상태와 선택되지 않은 상태 모두에 대한 기본 이미지 목록의 첫 번째 이미지를 표시합니다. 또한 기본적으로 항목은 오버레이 이미지 또는 상태 이미지를 표시하지 않습니다. TVM_INSERTITEM 또는TVM_SETITEM 메시지를 보내 항목에 대한 이러한 기본 동작을 변경할 수 있습니다. 이러한 메시지는 TVITEM 구조를 사용하여 항목에 대한 이미지 목록 인덱스를 지정합니다.

항목의 선택 및 선택되지 않은 이미지를 지정하려면 TVITEM 구조의 마스크 멤버에서 TVIF_SELECTEDIMAGE 및 TVIF_IMAGE 비트를 설정하고 iSelectImageiImage 멤버의 컨트롤의 일반 이미지 목록에서 인덱스를 지정합니다. 또는 인덱스를 지정하는 대신 iSelectImageiImage 에서 I_IMAGECALLBACK 값을 지정할 수 있습니다. 이렇게 하면 항목이 다시 그려질 때마다 컨트롤이 부모 창에서 이미지 목록 인덱스 쿼리를 수행합니다. 컨트롤은 인덱스를 검색하기 위해 TVN_GETDISPINFO 알림 메시지를 보냅니다.

오버레이 이미지를 항목과 연결하려면 INDEXTOOVERLAYMASK 매크로를 사용하여 항목의 TVITEM 구조체 상태 멤버에 오버레이 마스크 인덱스를 지정합니다. 또한 stateMask 멤버에서 TVIS_OVERLAYMASK 비트를 설정해야 합니다. 오버레이 마스크 인덱스는 1 기반입니다. 인덱스가 0이면 오버레이 이미지가 지정되지 않음을 나타냅니다.

상태 이미지는 별도의 상태 이미지 목록에 저장되고 인덱스로 식별됩니다. 상태 이미지 목록을 지정하려면 TVM_SETIMAGELIST 메시지를 보냅니다. 1부터 시작하는 인덱스로 상태 이미지를 식별하는 목록 보기 컨트롤과 달리 트리 뷰 컨트롤 상태 이미지는 0부터 시작하는 인덱스로 식별됩니다. 그러나 인덱스 0은 항목에 상태 이미지가 없음을 나타냅니다. 따라서 이미지 0을 상태 이미지로 사용할 수 없습니다. 항목 상태 및 상태 이미지에 대한 자세한 내용은 트리 보기 항목 상태 개요를 참조하세요.

끌어서 놓기 작업

트리 뷰 컨트롤은 사용자가 항목을 끌기 시작할 때 부모 창에 알립니다. 부모 창은 사용자가 마우스 왼쪽 단추로 항목을 끌기 시작할 때 TVN_BEGINDRAG 알림 메시지를 수신하고 사용자가 오른쪽 단추로 끌기 시작할 때 TVN_BEGINRDRAG 알림 메시지를 받습니다. 트리 뷰 컨트롤에 TVS_DISABLEDRAGDROP 스타일을 지정하여 트리 뷰 컨트롤이 이러한 알림을 보내지 못하도록 방지할 수 있습니다.

TVM_CREATEDRAGIMAGE 메시지를 사용하여 끌기 작업 중에 표시할 이미지를 가져옵니다. 트리 뷰 컨트롤은 끌 항목의 레이블에 따라 끌기 비트맵을 만듭니다. 그런 다음 트리 뷰 컨트롤은 이미지 목록을 만들고, 비트맵을 추가하고, 이미지 목록에 핸들을 반환합니다.

항목을 실제로 끄는 코드를 제공해야 합니다. 일반적으로 이미지 목록 함수의 끌기 기능을 사용하고 끌기 작업이 시작된 후 부모 창으로 전송된 WM_MOUSEMOVEWM_LBUTTONUP (또는 WM_RBUTTONUP) 메시지를 처리하는 작업이 포함됩니다.

트리 뷰 컨트롤의 항목이 끌어서 놓기 작업의 대상이 될 경우 마우스 포인터가 대상 항목에 있는 시기를 알아야 합니다. TVM_HITTEST 메시지를 사용하여 확인할 수 있습니다. 마우스 포인터의 현재 좌표를 포함하는 TVHITTESTINFO 구조체의 주소를 지정합니다. SendMessage 함수가 반환되면 구조체에는 트리 뷰 컨트롤을 기준으로 마우스 포인터의 위치를 나타내는 플래그가 포함됩니다. 포인터가 트리 뷰 컨트롤의 항목 위에 있는 경우 구조체에는 항목에 대한 핸들도 포함됩니다.

TVM_SETITEM 메시지를 사용하여 상태를 TVIS_DROPHILITED값으로 설정하여 항목이 끌어서 놓기 작업의 대상임을 나타낼 수 있습니다. 이 상태가 있는 항목은 끌어서 놓기 대상을 나타내는 데 사용되는 스타일로 그려집니다.

알림 메시지 제어 Tree-View

트리 뷰 컨트롤은 다음 알림 메시지를 부모 창에 WM_NOTIFY 메시지 형식으로 보냅니다.

알림 설명
TVN_BEGINDRAG 끌어서 놓기 작업의 시작을 알립니다.
TVN_BEGINLABELEDIT   현재 위치 레이블 편집의 시작을 알립니다.
TVN_BEGINRDRAG 마우스 오른쪽 단추가 끌어서 놓기 작업을 시작했음을 알립니다.
TVN_DELETEITEM 특정 항목의 삭제 신호를 표시합니다.
TVN_ENDLABELEDIT 레이블 편집의 끝을 알립니다.
TVN_GETDISPINFO 트리 뷰 컨트롤에서 항목을 표시하는 데 필요한 정보를 요청합니다.
TVN_ITEMEXPANDED 부모 항목의 자식 항목 목록이 확장되거나 축소되었음을 나타냅니다.
TVN_ITEMEXPANDING 부모 항목의 자식 항목 목록이 확장되거나 축소될 것임을 나타냅니다.
TVN_KEYDOWN 키보드 이벤트를 신호로 표시합니다.
TVN_SELCHANGED 선택 항목이 한 항목에서 다른 항목으로 변경되었음을 나타냅니다.
TVN_SELCHANGING 선택 영역이 한 항목에서 다른 항목으로 변경될 것임을 나타냅니다.
TVN_SETDISPINFO 부모 창에 항목에 대해 유지 관리하는 정보를 업데이트해야 한다고 알립니다.

 

기본 Tree-View 제어 메시지 처리

이 섹션에서는 트리 뷰 컨트롤에서 수행하는 창 메시지 처리에 대해 설명합니다. 트리 뷰 컨트롤과 관련된 메시지는 이 문서의 다른 섹션에서 설명되므로 여기에 포함되지 않습니다.

메시지 처리 수행됨
WM_COMMAND EN_UPDATE 처리하고 컨트롤 알림 메시지를 편집할 EN_KILLFOCUS 다른 모든 편집 컨트롤 알림을 부모 창에 전달합니다. 반환 값이 없습니다.
WM_CREATE 메모리를 할당하고 내부 데이터 구조를 초기화합니다. 성공하면 0을 반환하고, 그렇지 않으면 -1을 반환합니다.
WM_DESTROY 컨트롤과 연결된 모든 시스템 리소스를 해제합니다. 0을 반환합니다.
WM_ENABLE 컨트롤을 사용하거나 사용하지 않도록 설정합니다.
WM_ERASEBKGND 트리 뷰 컨트롤의 현재 배경색을 사용하여 창 배경을 지웁니다. TRUE를 반환 합니다.
WM_GETDLGCODE DLGC_WANTARROWS 값과 DLGC_WANTCHARS 값의 조합을 반환합니다.
WM_GETFONT 현재 레이블 글꼴에 대한 핸들을 반환합니다.
WM_HSCROLL 트리 뷰 컨트롤을 스크롤합니다. 스크롤이 발생하면 TRUE 를 반환하고, 그렇지 않으면 FALSE 를 반환합니다.
WM_KEYDOWN 모든 키의 부모 창에 TVN_KEYDOWN 알림 메시지를 보냅니다. 사용자가 Enter 키를 누를 때 NM_RETURN(트리 보기) 알림 메시지를 보냅니다. 사용자가 방향 키 또는 PAGE UP, PAGE DOWN, HOME, END 또는 BACKSPACE 키를 누를 때 케어를 이동합니다. 사용자가 해당 키와 함께 Ctrl 키를 누를 때 트리 뷰 컨트롤을 스크롤합니다. 키가 처리되면 TRUE 를 반환하고, 그렇지 않으면 FALSE 를 반환합니다.
WM_KILLFOCUS 포커스가 있는 항목(있는 경우)을 다시 칠하고 부모 창에 NM_KILLFOCUS(트리 뷰) 알림 메시지를 보냅니다.
WM_LBUTTONDBLCLK 레이블 편집을 취소하고 항목을 두 번 클릭하면 NM_DBLCLK(트리 보기) 알림 메시지를 부모 창으로 보냅니다. 부모 창이 0을 반환하는 경우 트리 뷰 컨트롤은 항목의 확장된 상태를 전환하여 부모 창을 TVN_ITEMEXPANDING 보내고 알림 메시지를 TVN_ITEMEXPANDED . 반환 값이 없습니다.
WM_LBUTTONDOWN 사용자가 부모 항목과 연결된 단추를 클릭하면 확장된 상태를 전환합니다. 사용자가 항목 레이블을 클릭하면 트리 뷰 컨트롤이 포커스를 선택하여 항목으로 설정합니다. 사용자가 마우스 단추를 놓기 전에 마우스를 이동하면 트리 뷰 컨트롤이 끌어서 놓기 작업을 시작합니다. 반환 값이 없습니다.
WM_PAINT 트리 뷰 컨트롤의 잘못된 영역을 그립니다. 0을 반환합니다. wParam 매개 변수가 NULL이 아닌 경우 컨트롤은 값이 HDC(디바이스 컨텍스트)에 대한 핸들이라고 가정하고 해당 디바이스 컨텍스트를 사용하여 그립니다.
WM_RBUTTONDOWN 항목을 클릭하고 끌기 작업이 시작되었는지 확인합니다. 작업이 시작된 경우 부모 창에 TVN_BEGINRDRAG 알림 메시지를 보내고 놓기 대상을 강조 표시합니다. 그렇지 않으면 부모 창에 NM_RCLICK(트리 보기) 알림 메시지를 보냅니다. 반환 값이 없습니다.
WM_SETFOCUS 포커스가 있는 항목(있는 경우)을 다시 칠하고 부모 창에 NM_SETFOCUS 알림 메시지를 보냅니다.
WM_SETFONT 지정한 글꼴 핸들을 저장하고 새 글꼴을 사용하여 트리 뷰 컨트롤을 다시 칠합니다.
WM_SETREDRAW 다시 그리기 플래그를 설정하거나 지웁니다. 트리 뷰 컨트롤은 다시 그리기 플래그가 설정된 후 다시 그려집니다. 0을 반환합니다.
WM_SIZE 트리 뷰 컨트롤의 클라이언트 영역 크기에 따라 달라지는 내부 변수를 다시 계산합니다. TRUE를 반환 합니다.
WM_STYLECHANGED 레이블 편집을 취소하고 새 스타일을 사용하여 트리 뷰 컨트롤을 다시 그립니다. 0을 반환합니다.
WM_SYSCOLORCHANGE 다시 그리기 플래그가 설정된 경우 새 색을 사용하여 트리 뷰 컨트롤을 다시 그리습니다. 반환 값이 없습니다.
WM_TIMER 항목 레이블 편집을 시작합니다. 사용자가 포커스가 있는 항목의 레이블을 클릭하면 트리 뷰 컨트롤은 편집 모드를 즉시 입력하는 대신 타이머를 설정합니다. 타이머를 사용하면 사용자가 레이블을 두 번 클릭하면 트리 뷰가 편집 모드로 들어가지 않도록 할 수 있습니다. 0을 반환합니다.
WM_VSCROLL 트리 뷰 컨트롤을 스크롤합니다. 스크롤이 발생하면 TRUE 를 반환하고, 그렇지 않으면 FALSE 를 반환합니다.

 

샘플: CustDTv는 TreeView에서 사용자 지정 그리기를 보여 줍니다(Q248496)