2009. 8. 27. 15:34 Programming/MFC

Resource Editor

  • Options : Has Buttons, Has Lines, Lines At Root, Edit Label
  • DDX : CTreeCtrl m_treeCtrl

OnInitDialog

BOOL CEx14Dlg::OnInitDialog()
{
	CDialog::OnInitDialog();
 
	// 시스템 메뉴에 "정보..." 메뉴 항목을 추가합니다.
 
	// IDM_ABOUTBOX는 시스템 명령 범위에 있어야 합니다.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);
 
	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}
 
	// 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는
	// 프레임워크가 이 작업을 자동으로 수행합니다.
	SetIcon(m_hIcon, TRUE);			// 큰 아이콘을 설정합니다.
	SetIcon(m_hIcon, FALSE);		// 작은 아이콘을 설정합니다.
 
	// TODO: 여기에 추가 초기화 작업을 추가합니다.
	TV_INSERTSTRUCT tvstruct;
 
	tvstruct.hParent = 0;
	tvstruct.hInsertAfter = TVI_LAST;
	tvstruct.item.pszText = "Root Tree";
	tvstruct.item.mask = TVIF_TEXT;
 
	m_treeCtrl.InsertItem(&tvstruct);
 
	return TRUE;  // 컨트롤에 대한 포커스를 설정하지 않을 경우 TRUE를 반환합니다.
}

TVN_SELCHANGED

void CEx14Dlg::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
 
	HTREEITEM hCurItem = pNMTreeView->itemNew.hItem;
 
	*pResult = 0;
}

Add, Delete

void CEx14Dlg::OnBnClickedAdd()
{
	HTREEITEM hParent;
	TV_INSERTSTRUCT tv_is;
 
	hParent = m_treeCtrl.GetSelectedItem();
	tv_is.hParent = hParent;
	tv_is.hInsertAfter = TVI_LAST;
	tv_is.item.mask = TVIF_TEXT;
	tv_is.item.pszText = _T("leaf Tree");
 
	m_treeCtrl.InsertItem(&tv_is);
	m_treeCtrl.Expand(hParent, TVE_EXPAND);
	m_treeCtrl.Invalidate();
}
 
void CEx14Dlg::OnBnClickedDelete()
{
	HTREEITEM hItem = m_treeCtrl.GetSelectedItem();
 
	if (AfxMessageBox("정말 삭제할까요?", MB_YESNO) == IDYES)
		m_treeCtrl.DeleteItem(hItem);
}
 
void CEx14Dlg::OnBnClickedUpdate()
{
	HTREEITEM hItem = m_treeCtrl.GetSelectedItem();
	m_treeCtrl.SetItemText(hItem, "Updated");
}
 
void CEx14Dlg::OnTvnEndlabeleditTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMTVDISPINFO pTVDispInfo = reinterpret_cast<LPNMTVDISPINFO>(pNMHDR);
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	HTREEITEM hItem = m_treeCtrl.GetSelectedItem();
	CString strItemText = pTVDispInfo->item.pszText;
	m_treeCtrl.SetItemText(hItem, strItemText);
 
	*pResult = 0;
}

posted by 부풍