Develop
2013.04.23 15:33

[c++] 트리컨트롤 스텝 3 예제..

조회 수 7966 추천 수 0 댓글 0
Atachment
첨부 '2'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

실행화면..

treectrl3.gif


사용하기 앞서..

대화상자에 트리컨트롤을 붙이고 옵션을 설정합니다.

Styles에 에디트 기능을 사용하기 위해서 Edit labels를 선택하고, 선택된 아이템을 표시할 수 있게 하기 위해서 Show selection always를 선택합니다.


프로그램 설명..

TreeCtrl을 이용하여 텍스트 추가, 삭제, 변경의 기능을 구현한 예제에서 텍스트 앞에 이미지가 추가된 예제입니다.

추가를 하면 자식노드가 추가되고, 삭제를 하면 해당 핸들의 자식노드까지 모두 제거됩니다.

변경은 선택된 노드에 편집가능 하도록 에디트박스가 생성됩니다.

특정 노드를 검색할 수 있는 검색 기능이 추가되었습니다.


소스 사용법..  

TVINSERTSTRUCT구조체를 이용하여 아이템들을 구성하는 코드입니다.

TVINSERTSTRUCT data;

// 부모가 될 트리를 지정한다.
data.hParent = parm_parent;
    
// 입력된 문자열을 정렬한다.
data.hInsertAfter = TVI_SORT;
  
// 텍스트만 삽입할건지, 이미지를 삽입할건지 결정
data.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
  
// 1부터 차례대로 지정된 아이콘을 불러와 삽입한다.
data.item.iImage = 1;
  
// 마우스로 선택시 그릴 아이콘 결정
data.item.iSelectedImage = 3;

// 삽입될 문자열 지정
data.item.pszText = parm_text;

// 삽입한다.
return m_my_tree_ctrl.InsertItem(&data);

트리컨트롤 사용중에 엔터키를 입력해도 대화상자가 종료되지 않도록 처리하는 코드입니다.

CWnd *p_wnd = GetFocus();
CWnd *p_edit = m_my_tree_ctrl.GetEditControl();

// 트리컨트롤을 사용중에 엔터키를 입력해도 대화상자가 종료되지 않도록 처리하는 코드

if(p_wnd != NULL &&
    ((p_edit != NULL && p_edit->m_hWnd == p_wnd->m_hWnd) ||
    m_my_tree_ctrl.m_hWnd == p_wnd->m_hWnd)){

    if(p_edit != NULL){
        // 에디트가 생성되어 있다는 소리는 라벨을 편집중에 엔터키를 눌렀다는 뜻이다.
        // 따라서 편집을 종료할수 있도록 해당 컨트롤에 포커스 해제 메시지를 전송한다.
        p_edit->SendMessage(WM_KILLFOCUS);
    }
}else{
    CDialog::OnOK();
}

2이면 자식노드가 보이는 상태이고 1이면 보이지 않는 상태를 위한 코드입니다.

if(pNMTreeView->action == 2){
    m_my_tree_ctrl.SetItemImage(pNMTreeView->itemNew.hItem, 0, 2);
}else{
    m_my_tree_ctrl.SetItemImage(pNMTreeView->itemNew.hItem, 1, 3);
}
*pResult = 0;


검색하고자 하는 항목을 찾기 위한 코드입니다.

if(m_my_tree_ctrl.GetItemText(parm_item) == parm_string){
    // 검색하고자 하는 항목을 찾은 경우..
    m_my_tree_ctrl.Select(parm_item, TVGN_CARET);
    return 1;
}else{
    if(m_my_tree_ctrl.ItemHasChildren(parm_item)){
        // 자식노드가 있는 경우, 자식노드를 탐색해야 한다.
        HTREEITEM child_item = m_my_tree_ctrl.GetChildItem(parm_item);
        do{
            if(1 == FindNodeByString(child_item, parm_string)) return 1;
        }while((child_item = m_my_tree_ctrl.GetNextSiblingItem(child_item))
            != NULL);
    }
}


Continue..

(추가적으로 코드가 필요하신 경우에는 소스를 다운받아 참조하세요.)


주의 사항..

편집한 문자열이 적용될수 있도록 1을 설정합니다.

void CTestTreeCtrlDlg::OnEndlabeleditMyTree(NMHDR* pNMHDR, LRESULT* pResult)
{
    *pResult = 1;
}

?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
409 Develop [c++] mfc로 만든 부엌 수납 시스템(2D기반 설계) file hooni 2013.04.23 7289
408 Develop [c] 웹 메모장.. ㅋㅋ file hooni 2013.04.23 6849
407 Develop [java] RGB코드를 HEX코드로 변환하는 코드 ㅎㅎ hooni 2013.04.23 8029
406 Develop 라이브러리에 대한 설명 (static & dynamic library) hooni 2013.04.23 6969
405 Develop [c] 파일(File)의 연결과 연결 해제 (link, unlink, chown) hooni 2013.04.23 9557
404 Develop [js] 실행되는 디렉토리 확인하는 스크립트.. hooni 2013.04.23 6789
403 Develop [c++] mfc 윈도우에서 ODBC 사용하여 MDB파일 읽기.. ㅋㅋ file hooni 2013.04.23 9146
402 Develop [c++] String Tokenizer (나중에 c 코드로 변경해서 사용할 것) hooni 2013.04.23 11731
401 Develop [doc] mfc 매뉴얼 다운 받아서 완성하기.. ㅋㄷ file hooni 2013.04.23 7716
400 Develop [c++] 채팅로봇 소스.. ㅋㄷㅋㄷ file hooni 2013.04.23 8903
399 Develop [c] 쓰레드에 대한 내용 퍼오기..ㅡㅡ; hooni 2013.04.23 8468
398 Develop [c++] mfc에서 윈도우 항상 위 속성 주기.. hooni 2013.04.23 11364
397 Develop [c++] Win32 API 기본 출력인 MessageBox() 함수 사용 예제.. file hooni 2013.04.23 12710
396 Develop [c] 파이프(popen)로 다른 프로세스 실행결과 가져오기 file hooni 2013.04.23 8427
395 Develop [c] 도메인(호스트)으로 IP정보 알아오기.. (nslookup과 비슷) file hooni 2013.04.23 6954
394 Develop [c] UTF-8을 EUC-KR로 변환.. (iconv) file hooni 2013.04.23 20204
Board Pagination Prev 1 ... 26 27 28 29 30 ... 53 Next
/ 53