CPractice8_2Dlg::CPractice8_2Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CPractice8_2Dlg::IDD, pParent)
{
...
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
// {
m_hSelectedNode = NULL;
m_hRoot = NULL;
// }
}
...
BEGIN_MESSAGE_MAP(CPractice8_2Dlg, CDialog)
//{{AFX_MSG_MAP(CPractice8_2Dlg)
...
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_CONTROL, OnSelchangedTreeControl)
ON_BN_CLICKED(IDC_BUTTON_INSERT, OnButtonInsert)
ON_BN_CLICKED(IDC_BUTTON_MODIFY, OnButtonModify)
ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CPractice8_2Dlg::OnInitDialog()
{
...
// TODO: Add extra initialization here
// {
TV_INSERTSTRUCT tvStruct;
tvStruct.hParent = 0;
tvStruct.hInsertAfter = TVI_LAST;
tvStruct.item.mask = TVIF_TEXT;
tvStruct.item.pszText = "루트 노드";
m_hRoot = m_treeControl.InsertItem(&tvStruct);
// }
return TRUE; // return TRUE unless you set the focus to a control
}
void CPractice8_2Dlg::OnSelchangedTreeControl(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
// {
// 현재 선택한 아이템의 핸들 값을 멤버변수에 저장한다.
m_hSelectedNode = pNMTreeView->itemNew.hItem;
...
// }
*pResult = 0;
}
void CPractice8_2Dlg::OnButtonInsert()
{
// TODO: Add your control notification handler code here
TV_INSERTSTRUCT tvStruct;
// 컨트롤로부터 데이터를 읽어온다.
UpdateData(TRUE);
// 에러처리 - 입력할 텍스트가 비어있나 검사한다.
if( !m_edText.IsEmpty() )
{
// 현재 선택된 아이템을 부모노드로 한다.
tvStruct.hParent = m_hSelectedNode;
tvStruct.hInsertAfter = TVI_LAST;
tvStruct.item.mask = TVIF_TEXT;
// 에디트 상자에 입력된 텍스트를 노드 이름으로 한다.
tvStruct.item.pszText = (LPTSTR)(LPCSTR)m_edText;
// 위에서 지정한 정보를 노드를 추가한다.
m_treeControl.InsertItem(&tvStruct);
BEGIN_MESSAGE_MAP(CLeftView, CTreeView)
//{{AFX_MSG_MAP(CLeftView) ON_NOTIFY_REFLECT(TVN_ITEMEXPANDING, OnItemexpanding) ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
//}}AFX_MSG_MAP
// Standard printing commands
...
END_MESSAGE_MAP()
...
BOOL CLeftView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
// {
// 트리부의 모양 정의 cs.style |= TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_SHOWSELALWAYS ;
// }
return CTreeView::PreCreateWindow(cs);
}
...
void CLeftView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
// TODO: You may populate your TreeView with items by directly accessing
// its tree control through a call to GetTreeCtrl().
// 트리부에 시스템 이미지 리스트 연결 GetTreeCtrl().SetImageList(m_imgTree.GetImageList(), TVSIL_NORMAL);
char pTmp[256]; memset(pTmp, '\0', 256); // 논리적 드라이브 정보 얻기 GetLogicalDriveStrings(256, pTmp);
CString strDrive;
// pTmp 에 얻어진 논리적 드라이브 정보를 strDrive 를 이용해 정보 출력 for(int i=0 ; i<256 ; i++) { if(pTmp[i] == '\0' && pTmp[i+1] == '\0') break; strDrive.Empty(); while(pTmp[i] != '\0') strDrive += pTmp[i++]; SetDriveInfo(strDrive); }
}
...
void CLeftView::DeleteAllSubItem(HTREEITEM hItemParent) { // 선택 아이템의 서브 아이템을 모두 제거한다. HTREEITEM hItem; while(hItem = GetTreeCtrl().GetChildItem(hItemParent)) GetTreeCtrl().DeleteItem(hItem); }
#include "FileTamView.h" #include "MainFrm.h"
void CLeftView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here // {
// CFileView의 포인터를 이용해 직접 컨트롤 CFileTamView *pView = (CFileTamView*)((CMainFrame*)(AfxGetApp()->m_pMainWnd))->m_wndSplitter.GetPane(0, 1);
// pView->SetFileInfo(GetSelectFolder(pNMTreeView->itemNew.hItem)); // } *pResult = 0; }