mfc 트리컨트롤 예제

TreeView 컨트롤에 새 항목을 추가하려면 TVINSERTSTRUCT 구조체 변수가 있는 TVM_INSERTITEM 메시지를 사용합니다. 항목의 정보를 상위 항목인 사람, 항목 레이블 및 관련 이미지와 같은 TVINSERTSTRUCT 변수에 채워야 합니다. 예제 파일TreeView.zip에서 Control.h에서 TreeView 컨트롤에 대한 도우미 클래스를 추가했습니다. TreeView::insertItem()를 사용하여 트리뷰에 항목을 추가할 수 있습니다. 일반적으로 이러한 Tree 컨트롤에 자식 항목을 추가하면 재귀 함수가 사용됩니다. 예를 들어 C: 드라이브 아래에 모든 폴더를 나열해야 하는 경우 하위 폴더를 찾기 위해 각 폴더를 거쳐야 합니다. 재귀 함수는 이러한 요청을 쉽게 처리할 수 있습니다. 좋은 예는 윈도우 탐색기입니다. 마우스 단추를 놓으면(WM_LBUTTONUP이 트리거될 때) ImageList_EndDrag()를 사용하여 끌어서 놓기 작업을 완료하려면 드래그한 항목을 대상 항목에 놓아야 합니다. 항목을 대상 항목으로 이동하려면 먼저 드래그한 항목의 복사본을 만들고 대상 항목 아래에 복제본을 삽입해야 합니다. 그런 다음 원래 드래그한 항목을 안전하게 삭제할 수 있습니다.

(위의 항목 추가 및 제거 섹션을 참조하십시오.) 드래그한 항목에하위 수준이 여러 개인 하위 항목이 많을 수 있습니다. 항목에 자식이 있는 경우 모든 자식도 이동합니다. 모든 하위 항목을 찾기 위해 모든 하위 트리를 통과해야 하기 때문에 이것은 약간 어려운 작업입니다. 자세한 내용은 예제에서 보기::moveTreeViewItem()을 살펴보십시오. Visual Studio 예제 및 Visual Studio 자습서 및 mfc 트리 컨트롤 tvN_BEGINLABELEDIT를 받으면 0이 아닌 값을 반환하여 항목 레이블을 편집하지 못하도록 할 수 있습니다. 또는 tvN_BEGINLABELEDIT 처리기에서 레이블의 문자 수를 제한할 수 있습니다. 사용자가 편집 항목 레이블을 취소하거나 완료하면 tvN_ENDLABELEDIT가 트리거됩니다. TVN_ENDLABELEDIT 처리기에서 TVM_SETITEM 메시지와 함께 항목의 실제 텍스트를 업데이트하는 것은 사용자의 responsibiltiy입니다. 다음은 tvN_ENDLABELED처리기 함수의 예입니다. MFC Tree 컨트롤은 항목의 계층적 보기를 표시하는 유용한 컨트롤 중 하나입니다. 폴더 목록, 부모 – 자식 관계 항목 등을 표시할 수 있습니다. InsertItem 함수는 HTREEITEM에 핸들을 반환하며, 이 핸들은 레벨 아래로 항목을 추가하는 데 사용할 수 있습니다.

이 함수 InsertItem 오버로드 하 고 몇 가지 더 많은 서명이 있습니다. 그러나 간단한 항목 삽입의 경우이 함수 서명은 우리에게 충분합니다. Step 1 – 프로젝트가 만들어지면 텍스트 컨트롤의 캡션인 TODO 줄이 표시됩니다. 캡션을 제거하고 ID를 IDC_STATIC_TXT로 설정합니다. 이 응용 프로그램은 TreeView 컨트롤을 테스트하는 것입니다. 왼쪽 마우스 버튼을 사용하여 항목을 드래그 앤 드롭하고 오른쪽 마우스 버튼을 사용하여 TreeView에서 항목을 추가하거나 제거합니다. 이 프로그램은 Windows API만 사용하지만 MFC나 .NET은 사용하지 않습니다. MVC(모델-뷰-컨트롤러) 패러다임을 사용하여 자체 GUI 프레임워크를 구현했습니다.

단추 및 텍스트 상자와 같이 자주 사용하는 다른 컨트롤은 Controls.h에 정의되어 있습니다. 아시다시차서, 기본 클래스는 이러한 함수와는 아무 상관이 없습니다. 단순히 윈도우 메시지를 처리하고 가상 함수를 호출합니다 (메시지 처리 기능을 등록하는 데 지루해했습니다). 기본 클래스는 또한 CTreeCtrl 자체 작업을 수행 할 수 있습니다, 그래서 당신은 lClick ()를받을 때마다,이 클릭이 현재 선택이 변경되는 경우 당신은 또한 selChanged ()를 받게됩니다. 유일한 차이점은 rClick () : 대부분의 경우 마우스 오른쪽 단추로 클릭하여 선택한 항목을 변경하려면 메시지 처리기에서이 경우를 처리하므로 선택 항목이있는 경우 selChanged ()도 보냅니다. 원하는 경우 이 동작을 변경할 수 있습니다. 글쎄, 이 기능은 아주 잘 작동하지만, 내가 그것을 디자인할 때, 당신이 그것을 기대하지 않았다.