hur.cn - 华软网

 热门搜索

请教大家关于CTreeCtrl的结点选中、不选中图标显示的问题,类似资源管理器

  作者:未知    来源:网络    更新时间:2011/10/8
1. 首先, 从CTreeCtrl派生一个新类: class CDragDropTreeCtrl : public CTreeCtrl

2. 给新类添加一个成员函数:
   HTREEITEM CDragDropTreeCtrl::AddItem( 
HTREEITEM hParent, 
CString csItemName, 
HTREEITEM hInsAfter, 
int iSelImage, 
int iNonSelImage, 
long lParam
)
{
HTREEITEM hItem;
TV_ITEM tvItem;
TV_INSERTSTRUCT tvIns;

tvItem.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
int nLength = csItemName.GetLength();
tvItem.pszText = csItemName.GetBuffer(nLength);
tvItem.cchTextMax = nLength;
tvItem.lParam = lParam;

tvItem.iImage = iNonSelImage;
tvItem.iSelectedImage = iSelImage;

tvIns.item = tvItem;
tvIns.hInsertAfter = hInsAfter;
tvIns.hParent = hParent;

hItem = InsertItem(&tvIns);

return (hItem);
}

3. 在对话框里声明如下变量:
CImageList m_image; // 树的图片
CDragDropTreeCtrl m_treeCtrl; // 树
CImageList m_cImageList; // 图像列表

4. 在对话框的初始化函数里:
// 树的大小
RECT rect;
this->GetClientRect(&rect);
rect.left = rect.left + 10;
rect.top = rect.top + 10;
rect.right = rect.right / 3;
rect.bottom = rect.bottom - 60;

m_treeCtrl.Create(WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP | TVS_HASLINES | TVS_LINESATROOT
| TVS_HASBUTTONS | TVS_TRACKSELECT | TVS_SHOWSELALWAYS | TVS_EDITLABELS, 
rect,this, IDC_TREE);

//if(! m_cImageList.Create(16,16, 0, 1, 0)) 
if(! m_cImageList.Create(16, 16, ILC_COLOR24, 2, 2)) 
{
AfxMessageBox(L"Problem in creating ImageList Ctrl");
}
else 
{
CBitmap bmpImage;
/*for ( UINT nBitmapId = IDB_BITMAP1, nIndex = 0; nBitmapId <= IDB_BITMAP2; nBitmapId++, nIndex++) */
for ( UINT nBitmapId = 104; nBitmapId <= 105; nBitmapId++) 
                  // 执行2次,m_cImageList里应该有2图标
                  // 104为图标IDB_BITMAP1, 105为图标IDB_BITMAP2
{
bmpImage.LoadBitmap(nBitmapId);
m_cImageList.Add(&bmpImage, (COLORREF)NULL);
//bmpImage.DeleteObject();
bmpImage.Detach();
}
}
m_treeCtrl.SetImageList(&m_cImageList, TVSIL_NORMAL);




HTREEITEM hTItem = treeCtrl.AddItem(TVI_ROOT, L"xxx师演习通信网络图", NULL, 1,1,0); 

6. 请注意最后一句话:
最后为: 1,1,0); ---- 结点上无任何图标;
为: 0,0,0); ---- 结点选中和不选中均显示IDB_BITMAP1图标;
为: 1,0,0); ---- 结点选中无图标,不选中显示IDB_BITMAP1图标;
意味着索引0的图标正常,而索引1的图标不正常,但我前面的代码添加了2个图标IDB_BITMAP1、IDB_BITMAP2,应该索引1也有图标存在才对。

请大家帮忙分析下,谢谢!!!
---华软 网友回答---
顶下,知道的帮帮忙。
---华软网友回复---
http://www.codeproject.com/KB/tree/shelltreectrl.aspx
参考
---华软网友回复---
楼上的能否检查下我的代码什么地方出了问题
---华软网友回复---
顶下,有没知道的?
---华软网友回复---
问题已经解决,IDB-BITMAP1, IDB-BITMAP2的大小为48x48,修改为16x16就正常了。

结贴了,谢谢大家。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。