pmyTreeCtrl-> SetImageList(pmyImageList, TVSIL_NORMAL);
ASSERT(pmyTreeCtrl-> GetImageList(TVSIL_NORMAL) == pmyImageList);
段
1.CImageList myImageList;
2.CImageList::Create
3.CTreeCtrl::SetImageList:
CImageList* SetImageList( CImageList * pImageList, int nImageListType );
段
.h:
HTREEITEM m_hRootItem; //
CImageList MyImageList; //
.cpp
// Create an imagelist for the tree control.
MyImageList.Create( 20, 20, ILC_COLOR24, 2, 1 );
// Had created the imagelist(MyImageList) for the tree control in OnInitDialog.
CBitmap bmImage, bmSelectedImage;
bmImage.LoadBitmap( "NORMALIMAGE " );
bmSelectedImage.LoadBitmap( "SELECTIMAGE " );
int iNo = MyImageList.Add( bmImage.FromHandle( (HBITMAP)(bmImage) ), RGB( 0, 0, 0) );
int iNoSelect = MyImageList.Add( bmSelectedImage.FromHandle( (HBITMAP)(bmSelectedImage) ),
RGB( 0, 0, 0) );
bmImage.DeleteObject();
bmSelectedImage.DeleteObject();
TV_ITEM TreeItem;
TV_INSERTSTRUCT Item;
TreeItem.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
TreeItem.iImage = iNo;
TreeItem.iSelectedImage = iNoSelect;
二法
当然有方法了,你看下面的代码就知道了。
m_img.Create( GetSystemMetrics(SM_CXSMICON),
GetSystemMetrics(SM_CYSMICON),
ILC_COLOR24, 50, 50);
m_img.SetBkColor( GetSysColor(COLOR_WINDOW) );
m_img.Add(ExtractIcon( AfxGetApp()-> m_hInstance, "shell32.dll ", 6));
m_img.Add(ExtractIcon( AfxGetApp()-> m_hInstance, "shell32.dll ", 3));
m_img.Add(ExtractIcon( AfxGetApp()-> m_hInstance, "shell32.dll ", 4));
m_img.Add(ExtractIcon( AfxGetApp()-> m_hInstance, "shell32.dll ", 8));
m_img.Add(ExtractIcon( AfxGetApp()-> m_hInstance, "shell32.dll ", 11));
m_img.Add(ExtractIcon( AfxGetApp()-> m_hInstance, "shell32.dll ", 9));
m_img.Add(ExtractIcon( AfxGetApp()-> m_hInstance, "shell32.dll ", 15));
m_dirTree.SetImageList(&m_img,TVSIL_NORMAL);
其中: CImageList m_img;
CTreeCtrl m_dirTree;
这个是我做的一个关于得到系统所有目录滴例子中一段代码,呵呵……(使用的图标全部是系统图标)
三法
图标少的话,可以把所有图标做成一个bmp,然后loadbitmap,用索引操作.
或者:
CBitmap bmp;
bmp.LoadBitmap(IDB_BMP1);
...
这里把所有图标加入imagelist
m_treeList.SetImageList(&m_imageList, TVSIL_NORMAL);
四法
建立一个CTreeCtrl控制成员 m_Tree;
使用图标的方法:
Step1: //load icon
HICON icon[4];
Icon[0]=AfxGetApp()->LoadIcon(IDI_ICON1);
Icon[1]=AfxGetApp()->LoadIcon(IDI_ICON2);
Step2: //创建CImageList
CImageList *ImageList4Tree = new CImageList;
ImageList4Tree.Create(16,16,0,4,4); //16,16为图标分辩率,4,4为该list最多能容纳的图标数
For(int i=0;i<2;i++)
{
ImageList4Tree->Add(Icon[i]); //读入图标
}
Step3: //使用创建好的CImageList
m_Tree.SetImageList(ImageList4Tree);
Step4: //在添加项的同时选用图标
m_Tree.InsertItem(itemName,0,1,parentItem); //第2个参数是item在添加好后的图标 //第3个参数为item在被选中后的图标
五法
在MFC中应用CTreeCtrl控件的技巧
首先,我们要创建一个基本对话框的MFC工程MFC_TreeCRTL。然后在资源视图中插入两个Dialog,ID分别为IDD_DIALOG11和IDD_DIALOG211,都更改Style属性为Child,Border属性为None,为它们建立两个类,分别命名为Cdialog11和Cdialog211,并在MFC_TreeCRTLDlg.CPP文件中包含dialog11.h和dialog211.h两个头文件。再导入几个资源图标作为树形控件节点的图标及装饰面板。最后在主面板上添加一个CTreeCtrl控件,ID为默认,并在ClassWizard中添加它的一个变量,命名为m_mytree。
接着,我们进行具体代码编写。
我们必须在CMFC_TreeCRTLDlg 类中加入这些变量和函数
CDialog * m_treePages[2];
CString node_name;
BOOL InitMytree();
我们还要在CMFC_TreeCRTLDlg 类的构造函数中为m_treePages[2]分配空间,m_treePages[0]=new Cdialog11; m_treePages[1]=new Cdialog211;
InitMytree()函数是 m_mytree 的初始化过程
BOOL CMFC_TreeCRTLDlg::InitMytree()
{
//节点的图标
int i=0;
int i_count=2;
//载入图标
HICON icon[4];
icon[0]=AfxGetApp()->LoadIcon (IDI_ICON6);
icon[1]=AfxGetApp()->LoadIcon (IDI_ICON7);
//创建图像列表控件
CImageList *m_imagelist=new CImageList;
m_imagelist->Create(16,16,0,7,7);
m_imagelist->SetBkColor (RGB(255,255,255));
for(int n=0;n<i_count;n++)
{
m_imagelist->Add(icon[n]); //把图标载入图像列表控件
}
m_mytree.SetImageList(m_imagelist,TVSIL_NORMAL); //为m_mytree设置一个图像列表,使CtreeCtrl的节点显示不同的图标
m_mytree.SetBkColor(RGB(0,250,255));//设置m_mytree的背景色
//创建节点
//父节点
HTREEITEM root0=m_mytree.InsertItem("Dialog1",0,1,TVI_ROOT,TVI_LAST);
HTREEITEM root1=m_mytree.InsertItem("Dialog2",0,1,TVI_ROOT,TVI_LAST);
//一层子节点
HTREEITEM sub_son0=m_mytree.InsertItem("Dialog 1-1",0,1,root0,TVI_LAST);
HTREEITEM sub_son1=m_mytree.InsertItem("Dialog 2-1",0,1,root1,TVI_LAST);
//二层孙子节点
HTREEITEM sub_m_son0=m_mytree.InsertItem("Dialog 2-1-1",0,1,sub_son1,TVI_LAST);
//建立节点对应的Dialog
m_treePages[0]->Create(IDD_DIALOG11,this);
m_treePages[1]->Create(IDD_DIALOG211,this);
m_treePages[0]->ShowWindow(SW_SHOW);
m_treePages[1]->ShowWindow(SW_HIDE);
//把Dialog移到合适位置
CRect m_rect;
GetClientRect(m_rect);
m_rect.left=200;
m_treePages[0]->MoveWindow(m_rect);
m_treePages[1]->MoveWindow(m_rect);
return true;
}
始初化完成后,我们要添加CTreeCtrl的消息响应事件,这样才能让它按我们的要求起作用。我们打开Class Wizard点选IDC_TREE1添加TVN_SELCHANGED消息,并在消息响应函数中写入代码。
void CMFC_TreeCRTLDlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
UpdateData(true);
node_name=m_mytree.GetItemText(pNMTreeView->itemNew.hItem);
//在标题栏显示节点信息
SetWindowText(node_name);
//切换面板
if(node_name=="Dialog 1-1"){
m_treePages[0]->ShowWindow(SW_SHOW);
m_treePages[1]->ShowWindow(SW_HIDE);
}
else if(node_name=="Dialog 2-1-1"){
m_treePages[0]->ShowWindow(SW_HIDE);
m_treePages[1]->ShowWindow(SW_SHOW);
}
UpdateData(false);
*pResult = 0;
}
最后,我们在 CMFC_TreeCRTLDlg::OnInitDialog()初始化函数里调用InitMytree()函数。
————————————————————————————————————————————————————————————————————
Shell32.Dll 图标资源对照表
001:默认图标(无扩展名文件)
002:默认文本
003:EXE文件
004:文件夹闭合
005:文件夹打开
006:5.25" 5寸盘
007:3.5" 3寸盘/
008:移动存储
009:磁盘
010:网络硬盘
011:网络硬盘(离线)
012:空CD驱动器
013:Ram 盘
014:全球
015:不知(图标描述:一个地球上有一个鼠标)
016:我的电脑)
017:打印机
018:网上邻居
019:工作组
020:查看(详细描述:工具栏上的"平铺"、"图标"、"列表"、"详细信息"、的图标)
021:历史纪录文档
022:控制面版
023:搜索(描述:单纯的一个搜索放大镜)
024:帮助
025:运行
026:睡眠模式
027:弹出(256色)
028:关闭(描述:好像是关闭电源的那种)
029:共享
030:快捷方式小箭头
031:不知(类似 快捷箭头大小 黑色里有一个小圈圈)
032:回收站[空]
033:回收站[满]
034:网络空间文件夹
035:显示桌面
036:控制面版(256色)
037:{与020 相同} 查看(描述:工具栏上的"平铺"、"图标"、"列表"、"详细信息"、的图标)
038:打印机文件夹 (256色)
039:字体文件夹
040:任务栏和开始菜单
041:音频CD
042:不知(图标描述:和上Ftp的时候地址栏的图标一样。)
043:不知(图标描述:底层一个文件夹图标,顶层一个电脑图标)
044:收藏夹
045:登陆/注销
046:搜索文件夹
047:Windows 自动更新
048:不知(图标描述:一把锁)
049:不知(图标描述:底层一个文件夹窗口,顶层一个蓝色屏幕电脑图标)
050~053:都是空白图标
054:未知磁盘
133:不知(图标描述:层叠着的空白文件)
134:搜索(详细描述:打开方式那里的搜索。)
135:搜索我的电脑
137:{与022 相同} 控制面版
138:打印机和传真
139:添加新的打印机
140:网络打印机
141:不知(图标描述:一个打印机和一个软盘)
142~144:另类回收站[满](描述:和32.33 图标不一样,另一种回收站[满]样式)
145:不知(图标描述:2个文本文档,底层是一个红叉文档,顶层是一个完好文档,好像是完好文档替换损坏文档的意思)
146:复制文件
147:文件重命名
148:不知(图标描述:一个电脑+一个齿轮转移到一个文件夹内,好像是配置备份的意思。)
151:配置文件
152:文本文档
153:批处理文件(256色)
154:DLL文件
155:A字体(不好意思,不知道A字体的全名)
156:TrueType Font Truetype字体
157:Type 1 Font Type 1 字体
160:{与025 相同} 运行
161:删除
165:文件备份硬盘
166:光驱错误校验
167:磁盘碎片
168:安装打印机
169:安装网络打印机
170:不知(图标描述:一个打印机和一个软盘,左上角有一小勾勾)
171:颜色交换文件
172:共享文档
173:{与044 相同}收藏夹!
174:不知(图标描述:一个文件夹,文件夹上有几种颜色.有一个箭头指着,好像是要选择文件颜色还是怎么)
175:连接到
176:新建网络文件夹(256色)
177:不知(图标描述:一个文件夹窗口和一个齿轮,好像是配置文件夹)
178:添加新的连接-
179:不知(图标描述:底层一个地球,顶层一台电脑和主机)
180:不知(图标描述:一个显示器,打开了很多窗口.都缩小到了任务栏)
181:不知(图标描述:一个显示器,显示的空白桌面)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
下面的是文件夹选项中的图标:
182:在文件夹显示常见任务
183:使用 Windows 传统风格的文件夹
184:在同一窗口中打开每个文件夹
185:在不同窗口中打开不同的文件夹!
186:通过单击打开项目(指向时选定)
187:通过双击打开项目(单击时选定)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
191:另类回收站[空](256色)(描述:和32.33 图标不一样,另一种回收站[空]样式)
192:与191是一个图标样式的回收站[满](256色)
193:网络文件夹
194:不知(图标描述:3把钥匙)
196:传真机
197:安装传真机
198:安装网络传真机
199:网络传真机
200:禁止动作
210:文件夹选项
220:用户(256色)
221:电源开关!
222:DVD光盘
223:不知(图标描述:3张层叠的文档)
224:视频文件
225:音频文件
226:图像文件
227:混合媒体文件
228:音频CD (256色)
229:CF卡读卡器
230:Zip驱动器
231:不知(图标描述:类似快捷箭头的向下小图标)
232:{与231 相同} 不知(图标描述:类似快捷箭头的向下小图标)
233:{与008 相同} 移动存储
234:Zip驱动器(无盘)
235:我的文档
236:我的图片
237:我的音乐
238:我的视频
239:Msn
240:取消
241:不知(图标描述:我的文档图标+一个向右的箭头,难道是.........)
242:选择
243:2个文本文档
244:把此文件发布到Web
245:{与017 相同}打印机
246:播放
247:在线音乐商店
248:照相机
249:幻灯片
250:显示 (详细描述:控制面版的“显示”,也就是桌面属性)
251:在线定购打印机
252:打印图片
253:不知(图标描述:一个默认图标,中间一个红色的勾勾)
254:{与032 相同} 回收站[空]
255:前一文件夹
256:{与146 相同} 复制文件
257:{与175 相同} 连接到
258:新建网络共享文件夹
259:网络安装向导
260:将文件烧制到CD
261:将软件刻录到CD
262:将光盘仍到回收站
263:帮助
264:复制到文件夹
265:电子邮件
266:复制到CD
267:共享文件夹
268:辅助功能选项
269:用户帐户
270:桌面主题
271:添加/删除程序
272:打印机和其他硬件
273:网络和Internet连接!
274:选项
275:性能和维护
276:日期、时间、语言和区域选项
277:声音、语音和音频设备
278:批处理
279:{与269 相同} 用户帐户
281:放大镜
282:语音
283:屏幕键盘
284:不知(图标描述:2个黑白三角型组成的正方型图标)
289:帮助文档
290:确定、开始、Go 。
291:DVD驱动器
292:增强CD
293:未知CD
294:CD-ROM光盘
295:CD-R光盘
296:CD-RW光盘
297:DVD-RAM光盘
298:DVD-R光盘
299:MP3 播放器
300:大磁带驱动器
301:小磁带驱动器
302:普通CD
303:CF卡
304:DVD-ROM光盘
305:{与008 相同} 移动存储
306:PC卡
307:SD卡
308:智能卡
309:{与248 相同} 照相机
310:手机
311:不知(图标描述:底层一个地球,顶层一个打印机)
312:JAZ驱动器
313:{与230 相同} Zip驱动器
314:PDA
315:扫描仪
316:扫描仪和相机
317:DV机
318:DVD-RW光盘
319:新建文件夹
320:{与266 相同} 复制到CD
321:{与022 相同} 控制面版2
322:{与044 相同} 收藏夹
323:{与023 相同} 搜索(描述:单纯的一个搜索放大镜)
324:{与024 相同} 帮助
325:{与045 相同} 登陆/注销
326:{与020 相同,只不过小一点} 查看(描述:工具栏上的"平铺"、"图标"、"列表"、"详细信息"、的图标)
327:{与021 相同,只不过小一点} 历史纪录文档
328:{与025 相同} 运行
329:关闭
330:{与022 相同} 控制面版
331:弹出
337:不知(图标描述:一个放大镜在找驱动里面的东西)
338:{与200 相同} 禁止动作
512:Internet Explorer
1001:气球提示
1002:{与168 相同} 安装打印机
1003:不知(图标描述:一个主机上有一个勾)
1004:{与289 相同} 帮助文档
1005:不知(图标描述:一个默认图标+一个向右的箭头)
1006:打印文档
1007:{与253 相同} 不知(图标描述:一个默认图标,中间一个红色的勾勾)
1008:暂停打印
1009:开始打印
1010:共享传真机
1011:另类传真机(详细描述:与196有所不同)
8240:另类我的电脑(详细描述:与016有所不同)
16710~16721:所有{与161 相同} 删除