CTreeCtrl study

常用接口

插入

可以设置 data 然后根据选中的 data 来判断是哪个。

auto item = m_ctrl_tree.InsertItem(L"几何常数");
m_ctrl_tree.InsertItem(L"测量工步");
m_ctrl_tree.InsertItem(L"预处理");

SetItemImage

BOOL SetItemImage(
HTREEITEM hItem,
int nImage,
int nSelectedImage);

Notify

NM_CLICK

ON_NOTIFY(NM_CLICK, 4, &CFolderView::OnNMClickTree)

void OnNMClickTree(NMHDR *pNMHDR, LRESULT *pResult);

void CFolderView::OnNMClickTree(NMHDR *pNMHDR, LRESULT *pResult)
{
g_pwndMain->m_spWndFileList->ActivateFrame();
*pResult = 0;
}

typedef struct tagNMHDR
{
HWND hwndFrom;
UINT_PTR idFrom;
UINT code;
} NMHDR;

TVN_SELCHANGING

ON_NOTIFY(TVN_SELCHANGING, 4, &CFolderView::OnTvnSelchangingFolder)

afx_msg void OnTvnSelchangingFolder(NMHDR *pNMHDR, LRESULT *pResult);

void CFolderView::OnTvnSelchangingFolder(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: Add your control notification handler code here
*pResult = 0;
}

TVN_SELCHANGED

ON_NOTIFY(TVN_SELCHANGED, 4, &CFolderView::OnTvnSelchangedFolder)

void OnTvnSelchangedFolder(NMHDR *pNMHDR, LRESULT *pResult);

void CFolderView::OnTvnSelchangedFolder(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
HTREEITEM hItem = pNMTreeView->itemNew.hItem;
if (hItem == 0)
{
return;
}
if (hItem != m_curDbRootItem)
{
m_wndTree.SetItemImage(hItem, 1, 1);
}
if (pNMTreeView->itemOld.hItem != m_curDbRootItem)
{
m_wndTree.SetItemImage(pNMTreeView->itemOld.hItem, 2, 2);
}
m_wndTree.Expand(pNMTreeView->itemNew.hItem, TVE_EXPAND);

*pResult = 0;
}