treectrl的使用

TreeCtrl控制的显示速度太慢?
我从CTreeCtrl继承了一个TREE控制类,重载主要是为了改写每个节点的文本.我在 OnPaint函数中写了一些代码,但这严重地影响了TREE控制的滚动速度
.
OnPaint
函数

1.
可见节点,对于GetFirstVisibleItemGetNextVisibleItem来讲,
:
a.
根节点;b.父节点已展开的节点;因此,"可见"意味着"没有被未展开的父节点隐藏".当节点滚动到客户外时,它对上述两个函数来讲仍是可见的
.
2.
TREE的内容改变时,它默认只将变为可见的节点重绘.另外其它已经是可见的节点没有必要重绘,TREE只是滚动DC的位图而已
.
上面的意思是不要绘制你不需要看的节点,那会导致速度降低.建议,测试节点矩形是否在客户区,使得只有需要绘制的节点才会被绘制
.
void CIndentTree::OnPaint()
{
CPaintDC dc(this); // device context for painting
HTREEITEM hItem = NULL;
DRAWITEMSTRUCT dis;
CRect rc;
// redraw only visible items with indentation
for(
hItem = GetFirstVisibleItem();
hItem; hItem = GetNextVisibleItem( hItem ) )
{
if( !GetItemRect( hItem, rc, FALSE ) )
continue;
if( rc.top <= dc.m_ps.rcPaint.bottom &&
rc.bottom > dc.m_ps.rcPaint.top &&=20
rc.left <= dc.m_ps.rcPaint.right &&
rc.right > dc.m_ps.rcPaint.left )
{
dis.hwndItem = (HWND)hItem;
dis.rcItem = rc;
OnDrawItem(0, &dis, &dc);
}
}
}

 

没问题,这里有个删除的例子,你把杀出那句换成插入的就可以了

CTreeCtrl* pCtrl = (CTreeCtrl*) GetDlgItem(0, 0);
ASSERT(pCtrl != NULL);

// Look at all of the root-level items
HTREEITEM hCurrent = pCtrl->GetNextItem(TVI_ROOT, TVGN_NEXT);
while (hCurrent != NULL) {
// Get the text for the item. Notice we use TVIF_TEXT because
// we want to retrieve only the text, but also specify TVIF_HANDLE
// because we're getting the item by its handle.
TVITEM item;
TCHAR szText[1024];
item.hItem = hCurrent;
item.mask = TVIF_TEXT | TVIF_HANDLE;
item.pszText = szText;
item.cchTextMax = 1024;

BOOL bWorked = pCtrl->GetItem(&item);

// Try to get the next item
hCurrent = pCtrl->GetNextItem(hCurrent, TVGN_NEXT);

// If we successfuly retrieved an item, and the item's text
// contains a lowercase letter 'e', delete the item.
if (bWorked && _tcschr(item.pszText, 'e'))
pCtrl->DeleteItem(item.hItem);

    mapTreeHitem.clear();

    // TODO: 在此添加额外的初始化代码

    HTREEITEM hti;

    hti = mTreeCtrl.InsertItem("AAAAA");

    HTREEITEM SubHti;

    SubHti = mTreeCtrl.InsertItem("111", -1, -1, hti);

    mapTreeHitem.insert(make_pair(1, SubHti));

    SubHti = mTreeCtrl.InsertItem("222", -1, -1, hti);

    mapTreeHitem.insert(make_pair(2, SubHti));

    SubHti = mTreeCtrl.InsertItem("333", -1, -1, hti);

    mapTreeHitem.insert(make_pair(3, SubHti));

    SubHti = mTreeCtrl.InsertItem("444", -1, -1, hti);

    mapTreeHitem.insert(make_pair(4, SubHti));

 

    SubHti = mapTreeHitem[2];

    mTreeCtrl.SetTextColor(RGB(255,0,0));

    mTreeCtrl.SetItemText(SubHti, "OK");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值