树形控件上如何加图标? 想在基于CTreeView的CServerTreeView类上的每个节点加图标怎么实现啊?哪有有例子啊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 试下添加CImageList m_ImageList;m_ImageList.Create(16,16,ILC_COLOR32,2,2);m_ImageList.Add(theApp.LoadIcon(IDI_ICON1));m_ImageList.Add(theApp.LoadIcon(IDI_ICON2));m_TreeCtrl.SetImageList(&m_ImageList,TVSIL_NORMAL); 在网上找到了一个基于CTreeCtrl封装的很好的类CTreeCtrlBT但却不知道怎么加到我的程序里因为程序是基于CTreeView的所以并不需要creat一个树形控件,且所有的树形控件对象都是用的GetTreeCtrl()比如:m_hRootItem = GetTreeCtrl().InsertItem("游戏平台", 0, 0, TVI_ROOT, TVI_LAST);如果直接用CTreeCtrlBT的对象m_TreeCtrlBT去代替GetTreeCtrl()的话,就要create一个树形控件,但在基于CTreeView的类里并不需要这样动态创建树形控件所以想问,有什么两全其美的办法,让基于CTreeCtrlCTreeCtrlBT类在基于CTreeView的类中使用???额....我说的大家看的明白么? void CSmsTreeView::OnInitialUpdate() { CTreeView::OnInitialUpdate(); // TODO: Add your specialized code here and/or call the base class //创建树控件begin if (m_bFirst) { //创建图标列表begin m_ImageList.Create (32,32,TRUE | ILC_COLOR8,2,2); m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_BOX)); m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_SUB)); m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_INPUT)); m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_FOLDER)); m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_FLAG)); m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_SOME_LETTER)); m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_DOUBLE)); //创建图标列表end CTreeCtrl& CtlTree=(CTreeCtrl&)GetTreeCtrl (); CtlTree.SetBkColor (RGB(230,250,250)); CtlTree.SetImageList (&m_ImageList,TVSIL_NORMAL); int i=0; TV_INSERTSTRUCT tvRoot;//树根 TV_INSERTSTRUCT tvSecond;//树枝 tvRoot.hParent=NULL; tvRoot.item.pszText="本地"; tvRoot.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE; tvRoot.item.iImage=i; tvRoot.item.iSelectedImage=i; HTREEITEM item_root=CtlTree.InsertItem (&tvRoot); CtlTree.SetItemData(item_root,(DWORD)0); CString strSecond[6]={"收件箱","发件箱","草稿箱","收藏夹","垃圾箱","报告箱"}; for(i=0;i<6;i++) { tvSecond.hParent=item_root; tvSecond.item.pszText=(LPTSTR)(LPCTSTR)strSecond[i]; tvSecond.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE; tvSecond.item.iImage=1; tvSecond.item.iSelectedImage=2; HTREEITEM item_second=CtlTree.InsertItem (&tvSecond); CtlTree.SetItemData(item_second,(DWORD)(i+1)); CtlTree.Expand(item_root,TVE_EXPAND); DWORD dwStyle=GetWindowLong(CtlTree.m_hWnd ,GWL_STYLE); } m_bFirst = FALSE; } //创建树控件end} if(NULL == m_ServerImgList.GetSafeHandle()){ m_ServerImgList.Create(16, 16, ILC_COLOR24 | ILC_MASK, 0, 256); CBitmap m_Bmp; m_Bmp.LoadBitmap(IDB_LOBBY_BITMAP); //IDB_LOBBY_BITMAP是有很多个ico组成的位图 if(NULL != m_Bmp.GetSafeHandle()) { m_ServerImgList.Add(&m_Bmp, RGB(3, 126, 129)); m_Bmp.DeleteObject(); }}if(NULL != m_ServerImgList.GetSafeHandle()){ GetTreeCtrl().SetImageList(&m_ServerImgList, TVSIL_NORMAL);}程序运行发现,可以节点上加载图片成功,但不明白的是,这段代码是如何选位图上的哪几ico放在程序中?如果我要指定哪个放在哪个节点上是怎么做呢? PostThreadMessage如何在不同进程见传递参数? 类互相引用无法编译的问题 请问如何在MFC中调用.CHM格式的帮助文件 乞高人指教(一经解决,立即结帖!) 把数组当作指针传递时,发生以下错误 哪里有<<ATL开发指南>>及<<深入解析ATL>>下载?马上给分! 为什么会出现这种情况?请高手指点迷津 怎样用createwindow创建ie的窗口 这里CString和string的区别 怎么样播放网络上传过来的实时Mpeg-1流? 请问,在图像处理程序中,是否是无论输入的文件为什么格式,最后处理中都要以dib形式处理最为方便? 关闭窗口时错误
m_ImageList.Add(theApp.LoadIcon(IDI_ICON1));
m_ImageList.Add(theApp.LoadIcon(IDI_ICON2));
m_TreeCtrl.SetImageList(&m_ImageList,TVSIL_NORMAL);
但却不知道怎么加到我的程序里
因为程序是基于CTreeView的
所以并不需要creat一个树形控件,且所有的树形控件对象都是用的GetTreeCtrl()
比如:m_hRootItem = GetTreeCtrl().InsertItem("游戏平台", 0, 0, TVI_ROOT, TVI_LAST);
如果直接用CTreeCtrlBT的对象m_TreeCtrlBT去代替GetTreeCtrl()的话,就要create一个树形控件,但在基于CTreeView的类里并不需要这样动态创建树形控件
所以想问,有什么两全其美的办法,让基于CTreeCtrlCTreeCtrlBT类在基于CTreeView的类中使用???额....我说的大家看的明白么?
void CSmsTreeView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
//创建树控件begin
if (m_bFirst)
{
//创建图标列表begin
m_ImageList.Create (32,32,TRUE | ILC_COLOR8,2,2);
m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_BOX));
m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_SUB));
m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_INPUT));
m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_FOLDER));
m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_FLAG));
m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_SOME_LETTER));
m_ImageList.Add (AfxGetApp()->LoadIcon (IDI_DOUBLE));
//创建图标列表end CTreeCtrl& CtlTree=(CTreeCtrl&)GetTreeCtrl ();
CtlTree.SetBkColor (RGB(230,250,250));
CtlTree.SetImageList (&m_ImageList,TVSIL_NORMAL);
int i=0;
TV_INSERTSTRUCT tvRoot;//树根
TV_INSERTSTRUCT tvSecond;//树枝
tvRoot.hParent=NULL;
tvRoot.item.pszText="本地";
tvRoot.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
tvRoot.item.iImage=i;
tvRoot.item.iSelectedImage=i;
HTREEITEM item_root=CtlTree.InsertItem (&tvRoot);
CtlTree.SetItemData(item_root,(DWORD)0);
CString strSecond[6]={"收件箱","发件箱","草稿箱","收藏夹","垃圾箱","报告箱"};
for(i=0;i<6;i++)
{
tvSecond.hParent=item_root;
tvSecond.item.pszText=(LPTSTR)(LPCTSTR)strSecond[i];
tvSecond.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
tvSecond.item.iImage=1;
tvSecond.item.iSelectedImage=2;
HTREEITEM item_second=CtlTree.InsertItem (&tvSecond);
CtlTree.SetItemData(item_second,(DWORD)(i+1));
CtlTree.Expand(item_root,TVE_EXPAND);
DWORD dwStyle=GetWindowLong(CtlTree.m_hWnd ,GWL_STYLE);
}
m_bFirst = FALSE;
}
//创建树控件end
}
{
m_ServerImgList.Create(16, 16, ILC_COLOR24 | ILC_MASK, 0, 256); CBitmap m_Bmp;
m_Bmp.LoadBitmap(IDB_LOBBY_BITMAP); //IDB_LOBBY_BITMAP是有很多个ico组成的位图
if(NULL != m_Bmp.GetSafeHandle())
{
m_ServerImgList.Add(&m_Bmp, RGB(3, 126, 129));
m_Bmp.DeleteObject();
}
}if(NULL != m_ServerImgList.GetSafeHandle())
{
GetTreeCtrl().SetImageList(&m_ServerImgList, TVSIL_NORMAL);
}程序运行发现,可以节点上加载图片成功,但不明白的是,这段代码是如何选位图上的哪几ico放在程序中?如果我要指定哪个放在哪个节点上是怎么做呢?