티스토리 뷰

프로그래밍/MFC

MFC 트리 뷰 클래스

에어버스 2016. 7. 10. 12:53

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, 161, RGB(255255255));
 
    CTreeCtrl& tree = GetTreeCtrl();
    tree.SetImageList(&il, TVSIL_NORMAL); // 이미지 리스트 설정
    il.Detach();
 
    // 1레벨 초기화
    HTREEITEM hSun = tree.InsertItem(L"태양"00, 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], 11, hSun, TVI_LAST);
 
    // 3레벨 초기화
    tree.InsertItem(L"달"22, hPlanet[2], TVI_LAST);
    tree.InsertItem(L"포보스"22, hPlanet[3], TVI_LAST);
    tree.InsertItem(L"데이모스"22, hPlanet[3], TVI_LAST);
    tree.InsertItem(L"이오"22, hPlanet[4], TVI_LAST);
    tree.InsertItem(L"에우로파"22, hPlanet[4], TVI_LAST);
    tree.InsertItem(L"가니메데"22, hPlanet[4], TVI_LAST);
    tree.InsertItem(L"칼리스토"22, 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

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
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