[MFC] 윈도우 프로그래밍 기초 - 트리 컨트롤
이번에는 트리 컨트롤에 대해서 소개하고자 합니다.
위의 그림에서 빨간색으로 표기된 구조가 Tree Control의 한 예입니다.
이런 구조는 많이 익숙하실거라고 생각됩니다.
1. CTreeCtrl 클래스
1-a. 멤버 함수
* InsertItem |
HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT , HTREEITEM hInsertAfter = TVI_LAST ) ;
-> lpszItem : 아이템에 표시할 문자열 주소 -> hParent : 추가되어 있는 부모 아이템의 헨들 -> TVI_ROOT는 루트 아이템으로 기본 값 지정되어 있음.
(궁금하신 분들은 자료 정의나 구글링 해보세요.) -> hInsertAfter : 새로운 아이템이 어떤 아이템의 뒤에 삽입될 것인지를 지정 *> Return Value : 추가된 아이템의 헨들(HTREEITEM 반환), 실패시 NULL
기존에 리스트 컨트롤 강의에선 InsertItem 이런 거에 담는 개념이었는데, 이 원형은 HTREEITEM이라는 형태로 반환하여 뿌리 구축 단위로 동작함. (직접 코드 짜보면 이해함)
|
* DeleteItem |
BOOL DeleteItem ( HTREEITEM hItem ) ; -> hItem : 삭제할 트리 아이템의 헨들 -> Return Value : 성공시 TRUE, 실패시 FALSE; |
* DeleteAllItems |
BOOL DeleteAllItems( ) ;
-> 트리 컨트롤의 모든 아이템들을 전체 삭제함.
-> Return Value : 성공시 TRUE, 실패시 FALSE |
* GetParentItem |
HTREEITEM GetParentItem( HTREEITEM hItem ) const;
-> hItem : 부모 아이템을 찾고자 하는 트리 아이템의 핸들 (쉽게 말하면 부모 아이템을 가져온다고 이해하는 게 정신적으로 편함) -> Return Value : 부모 아이템의 핸들, 실패시 NULL
|
* GetItemText |
CString GetItemText ( HTREEITEM hItem ) const ;
-> hItem : 텍스트를 획득하고자 하는 트리 아이템의 핸들 -> Return Value : 트리 아이템의 텍스트 |
1-b. 트리 컨트롤(Tree Control)의 Primative Attribute (주요 속성)
주요 속성이라고 지정하긴 제목을 말하긴 했는데, 트리를 운영하는 데 가장 중요한 요소라서 이렇게 불렀으니깐 쉽게 생각하시기 바랍니다. 잊어버리셔도 됩니다. 동물적으로 찾아서 보실 수 있으면 됩니다.
| |
트리 컨트롤 속성 |
설명 |
Check Boxes |
아이템에 체크박스를 표시하기 위한 속성 |
Has Buttons |
서브 아이템이 있는 경우, 해당 아이템에 [+], [-] 버튼을 표시하기 위한 속성 (옵션??이 더 맞는 말인거 같음) |
Has Lines |
아이템 간의 연결 관계를 라인을 사용하여 표현하기 위한 속성 -> 제 블로그에도 사실 보면 트리 라인있습니다. 모르시면 메뉴 보셔도 됩니다. |
Lines At Root |
루트 아이템에도 라인을 표시하기 위한 속성. |
Single Expand |
확장되는 아이템을 하나로 지정하기 위한 속성. True로 설정하면 하나의 아이템을 확장했을 때 다른 확장 아이템은 축소한다. |
Tract Select |
트래킹 표시를 지정하기 위한 속성 True로 설정하면 마우스 포인터가 위치된 아이템에 밑줄이 표시된다. |
2. 결과물
|
|
|
3. 실습
a. 레이아웃 디자인
컨트롤 이름 |
범주(T) |
매개 변수(N) |
비고 |
IDC_TREE1 |
Control |
m_yourtree |
|
IDC_EDIT1 |
해당 없음 |
해당 없음 |
해당 없음 |
IDC_TREE1의 리소스 속성
Has Buttons, Has Lines, Single Expand, Lines At Root (True)로 해주기
4. 코드 구현
// CMyTreeDlg 메시지 처리기 BOOL CMyTreeDlg::OnInitDialog()
// (중략~~~~~)
// TODO: 여기에 추가 초기화 작업을 추가합니다. HTREEITEM root_branch = m_yourtree.InsertItem(_T("지사")); HTREEITEM child_b_china = m_yourtree.InsertItem(_T("중국"), root_branch); HTREEITEM child_h_seoul = m_yourtree.InsertItem(_T("서울"), root_headoffice); // this->m_yourtree.InsertItem
// (중략~~~~~)
} |
OnInitDialog |
void CMyTreeDlg::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
CString strRoot; CString strTxt;
hItemCur = pNMTreeView->itemNew.hItem;
strRoot = m_yourtree.GetItemText(hItemRoot);
*pResult = 0; // 자동 생성된 부분임. |
OnTvnSelchangedTree1 ( ) -> 마우스로 클릭해서 생성한 함수 원형
|
[첨부(Attachment)]
'소프트웨어(SW) > MS - C++ (GUI) MFC' 카테고리의 다른 글
[MS Visual C++] Visual Studio 2019(C++ MFC) 사용하기 및 OpenCV 4.1 환경설정 (11) | 2019.11.13 |
---|---|
[MFC] Visual C++ 2019(C++ MFC)에서 Maria DB 연동하기 (10) | 2019.07.24 |
[MFC] 윈도우 프로그래밍 기초 - 순수한 List Control 배우기 (1) | 2015.04.01 |
[MFC] 윈도우 프로그래밍 기초 - 프로그래스 컨트롤 (1) | 2015.03.31 |
[MFC] 윈도우 프로그래밍 기초 - 공통 컨트롤의 이해? (1) | 2015.03.31 |