다음을 통해 공유


Tree-View 컨트롤에 대한 정보

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

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

계층 구조에서 5개의 노드를 보여 주는 스크린샷 . 한 노드의 텍스트가 선택되어 있지만, 노드들은 서로 선으로 연결되어 있지 않습니다.

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

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

Tree-View 스타일

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

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

이전 배열을 보여주는 스크린샷 이며, 선이 노드들을 연결합니다. 첫 번째 선은 루트 노드로부터 내려옵니다

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

이전 정렬을 보여 주는 스크린샷이지만 루트 노드로 이어지는 추가 가로줄이

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

이전 배열을 보여 주는 스크린샷이며, 두 줄의 각 꼭짓점에 확장/축소 단추가 있는.

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

이전 배열을 보여 주는 스크린샷이지만 각 노드 옆에 확인란이 있습니다. 두 개의 확인란이 선택되어

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

선은 없지만, 5개 노드의 원래 배열을 보여 주는 스크린샷 이며, 선택 강조 표시는 컨트롤의 전체 너비를 확장합니다.

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

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

부모 및 자식 항목

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

트리 뷰 컨트롤에 항목을 추가하려면 컨트롤에 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 메시지를 사용하여 항목의 현재 상태를 검색할 수도 있습니다. 항목 상태의 전체 목록은 Tree-View 컨트롤 항목 상태참조하세요.

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

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

항목의 오버레이 이미지를 설정하려면 statemaskTVIS_OVERLAYMASK 값을 포함해야 하며, 상태INDEXTOOVERLAYMASK 매크로를 사용하여 오버레이 이미지의 1부터 시작하는 인덱스를 왼쪽으로 8비트를 시프트한 값을 포함해야 합니다. 인덱스가 0이면 오버레이 이미지를 지정하지 않습니다.

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

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

항목 선택

트리 뷰 컨트롤은 선택 항목이 한 항목에서 다른 항목으로 변경될 때 TVN_SELCHANGINGTVN_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 구조를 사용하여 항목에 대한 이미지 목록 인덱스를 지정합니다.

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

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

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

끌어서 놓기 작업

트리 뷰 컨트롤은 사용자가 항목을 끌기 시작할 때 부모 창에 알립니다. 사용자가 마우스 왼쪽 단추로 항목을 끌기 시작하면 부모 창에 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_UPDATEEN_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_ITEMEXPANDINGTVN_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) 사용자 지정 그리기를 보여 줍니다.