티스토리 뷰
MFC 트리 뷰 클래스
트리 컨트롤을 이용한 사용자 인터페이스를 제공한다.
뷰의 영역 전체가 트리 컨트롤로 채워진 형태의 응용 프로그램을 작성할 수 있다.
CTreeView 클래스가 제공하는 거의 모든 기능은 트리 컨트롤을 퉁해서만 사용할 수 있다.
1
2
3 |
CTreeCtrl& tree = GetTreeCtrl(); // 트리 컨트롤 객체에 대한 참조값을 얻는다.
tree.SetImageList(...);
tree.InsertItem(...); |
cs |
위 코드 처럼 CTreeCtrl::GetTreeCtrl() 로 얻은 트리 컨트롤 객체에 대한 참조를 얻고나서 일반적인 트리 컨트롤을 다루듯이 코딩하면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 |
BEGIN_MESSAGE_MAP(CMFCApplication17View, CTreeView)
ON_COMMAND(ID_TEST_DELETEITEM, &CMFCApplication17View::OnTestDeleteitem)
ON_NOTIFY_REFLECT(TVN_SELCHANGED, &CMFCApplication17View::OnTvnSelchanged)
END_MESSAGE_MAP()
BOOL CMFCApplication17View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: CREATESTRUCT cs를 수정하여 여기에서
// Window 클래스 또는 스타일을 수정합니다.
cs.style |= (TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_TRACKSELECT);
return CTreeView::PreCreateWindow(cs);
}
void CMFCApplication17View::OnInitialUpdate()
{
...
CImageList il; // 이미지 리스트 초기화
il.Create(IDB_BITMAP1, 16, 1, RGB(255, 255, 255));
CTreeCtrl& tree = GetTreeCtrl();
tree.SetImageList(&il, TVSIL_NORMAL); // 이미지 리스트 설정
il.Detach();
// 1레벨 초기화
HTREEITEM hSun = tree.InsertItem(L"태양", 0, 0, TVI_ROOT, TVI_LAST);
// 2레벨 초기화
HTREEITEM hPlanet[9];
CString planet[] = { L"수성", L"금성", L"지구", L"화성", L"목성", L"토성", L"천황성", L"해왕성", L"명왕성" };
for (int i = 0; i < 9; i++)
hPlanet[i] = tree.InsertItem(planet[i], 1, 1, hSun, TVI_LAST);
// 3레벨 초기화
tree.InsertItem(L"달", 2, 2, hPlanet[2], TVI_LAST);
tree.InsertItem(L"포보스", 2, 2, hPlanet[3], TVI_LAST);
tree.InsertItem(L"데이모스", 2, 2, hPlanet[3], TVI_LAST);
tree.InsertItem(L"이오", 2, 2, hPlanet[4], TVI_LAST);
tree.InsertItem(L"에우로파", 2, 2, hPlanet[4], TVI_LAST);
tree.InsertItem(L"가니메데", 2, 2, hPlanet[4], TVI_LAST);
tree.InsertItem(L"칼리스토", 2, 2, hPlanet[4], TVI_LAST);
}
void CMFCApplication17View::OnTestDeleteitem()
{
// TODO: 여기에 명령 처리기 코드를 추가합니다.
CTreeCtrl& tree = GetTreeCtrl();
HTREEITEM hItem = tree.GetSelectedItem();
if (hItem != NULL)
tree.DeleteItem(hItem);
}
void CMFCApplication17View::OnTvnSelchanged(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
TVITEM tvi = pNMTreeView->itemNew;
CTreeCtrl& tree = GetTreeCtrl();
CString str = tree.GetItemText(tvi.hItem);
AfxGetMainWnd()->SetWindowTextW(str);
*pResult = 0;
} |
cs |