샘플 다운로드 :
위와 같이 트리에 폴더 목록을 표시하도록 하자.
다음과 같이 헤더 파일에 CDirTreeCtrl 클래스 형의 인스턴스와 OnSelChangeTree2 함수를 추가하자. 이 함수는 CDirTreeCtrl 트리로부터 발생하는 TVN_SELCHANGED 메시지를 처리하기 위해 사용된다.
// 구현
protected:
HICON m_hIcon;
CDirTreeCtrl m_TreeCtrl2;
// 메시지 맵 함수를 생성했습니다.
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg void OnSelchangedTree2(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
그리고 전체 폴더 path를 받아오기 위해 m_strPath 변수를 선언한다.
CString m_strPath;
이제 CPP 파일 내의 메시지 맵에 TVN_SELCHANGED 메시지를 처리하기 위해 등록한다.
BEGIN_MESSAGE_MAP(Ctest13Dlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE2, OnSelchangedTree2)
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
END_MESSAGE_MAP()
다음 OnInitDialog() 함수에 다음 코드를 추가해서 화면에 트리가 나타나도록 한다.
// TODO: 여기에 추가 초기화 작업을 추가합니다.
TCHAR szWorkDir[MAX_PATH];
// TODO: Add extra initialization here
// Here we subclass our CDirTreeCtrl
m_TreeCtrl2.Create( WS_CHILD | TVS_LINESATROOT | TVS_HASBUTTONS | WS_VISIBLE | TVS_HASLINES, CRect(0, 0, 300, 330), this, IDC_TREE2 );
m_TreeCtrl2.DisplayTree(NULL, FALSE);
이제 마지막, 트리에서 하나의 폴더를 선택하면 발생하는 이벤트를 처리하는 함수를 구현한다.
/*
트리에서 폴더를 선택하면 발생하는 이벤트 처리
*/
void Ctest13Dlg::OnSelchangedTree2(NMHDR* pNMHDR, LRESULT* pResult)
{
// m_strPath에 현재 위치를 담는다.
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
m_strPath = m_TreeCtrl2.GetFullPath( pNMTreeView->itemNew.hItem );
UpdateData( FALSE );
*pResult = 0;
this->SetWindowText(m_strPath);
}
'프로그래밍 > VC++' 카테고리의 다른 글
MFC 탭컨트롤에 TCN_SELCHANGE 메시지 날리는 방법 (0) | 2006.10.08 |
---|---|
경로에서 드라이브, 경로명, 파일명, 확장자등 가져오는 방법 (0) | 2006.10.07 |
CRectTracker 쓰는 법(간단) (0) | 2006.09.25 |
VC++ .Net 2003 에서 iostream.h 가 incude 되지 않는다? (0) | 2006.09.02 |
activex를 dialog base처럼 만드는법 (0) | 2006.08.28 |