如何动态更改tree的tree节点图标素材的图标

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&可编辑ztree节点的增删改功能图标控制---已解决 - 推酷
可编辑ztree节点的增删改功能图标控制---已解决
&!DOCTYPE html&
&TITLE& ZTREE DEMO - beforeEditName / beforeRemove / onRemove / beforeRename / onRename&/TITLE&
&meta http-equiv=&content-type& content=&text/ charset=UTF-8&&
&link rel=&stylesheet& href=&../../../css/demo.css& type=&text/css&&
&link rel=&stylesheet& href=&../../../css/zTreeStyle/zTreeStyle.css& type=&text/css&&
&script type=&text/javascript& src=&../../../js/jquery-1.4.4.min.js&&&/script&
&script type=&text/javascript& src=&../../../js/jquery.ztree.core-3.5.js&&&/script&
&script type=&text/javascript& src=&../../../js/jquery.ztree.excheck-3.5.js&&&/script&
&SCRIPT type=&text/javascript&&
var setting = {
addHoverDom: addHoverDom,
removeHoverDom: removeHoverDom,
selectedMulti: false
//给节点额外增加属性来控制“重命名”、“删除”图标的显示或隐藏
showRenameBtn:showRenameBtn,
simpleData: {
enable: true
callback: {
beforeDrag: beforeDrag,
beforeEditName: beforeEditName,
beforeRemove: beforeRemove,
beforeRename: beforeRename,
onRemove: onRemove,
onRename: onRename
//给节点额外增加属性来控制“重命名”、“删除”图标的显示或隐藏
{ id:1, pId:0, name:&父节点 1&, open:true,
noRemoveBtn:true,noEditBtn:true
{ id:11, pId:1, name:&叶子节点 1-1&,
noRemoveBtn:true,noEditBtn:true
{ id:12, pId:1, name:&叶子节点 1-2&},
{ id:13, pId:1, name:&叶子节点 1-3&},
{ id:2, pId:0, name:&父节点 2&, open:true},
{ id:21, pId:2, name:&叶子节点 2-1&},
{ id:22, pId:2, name:&叶子节点 2-2&},
{ id:23, pId:2, name:&叶子节点 2-3&},
{ id:3, pId:0, name:&父节点 3&, open:true},
{ id:31, pId:3, name:&叶子节点 3-1&},
{ id:32, pId:3, name:&叶子节点 3-2&},
{ id:33, pId:3, name:&叶子节点 3-3&}
var log, className = &dark&;
function beforeDrag(treeId, treeNodes) {
function beforeEditName(treeId, treeNode) {
className = (className === &dark& ? &&:&dark&);
showLog(&[ &+getTime()+& beforeEditName ]&&&& & + treeNode.name);
var zTree = $.fn.zTree.getZTreeObj(&treeDemo&);
zTree.selectNode(treeNode);
return confirm(&进入节点 -- & + treeNode.name + & 的编辑状态吗?&);
function beforeRemove(treeId, treeNode) {
className = (className === &dark& ? &&:&dark&);
showLog(&[ &+getTime()+& beforeRemove ]&&&& & + treeNode.name);
var zTree = $.fn.zTree.getZTreeObj(&treeDemo&);
zTree.selectNode(treeNode);
return confirm(&确认删除 节点 -- & + treeNode.name + & 吗?&);
function onRemove(e, treeId, treeNode) {
showLog(&[ &+getTime()+& onRemove ]&&&& & + treeNode.name);
function beforeRename(treeId, treeNode, newName) {
className = (className === &dark& ? &&:&dark&);
showLog(&[ &+getTime()+& beforeRename ]&&&& & + treeNode.name);
if (newName.length == 0) {
alert(&节点名称不能为空.&);
var zTree = $.fn.zTree.getZTreeObj(&treeDemo&);
setTimeout(function(){zTree.editName(treeNode)}, 10);
function onRename(e, treeId, treeNode) {
showLog(&[ &+getTime()+& onRename ]&&&& & + treeNode.name);
function showLog(str) {
if (!log) log = $(&#log&);
log.append(&&li class='&+className+&'&&+str+&&/li&&);
if(log.children(&li&).length & 8) {
log.get(0).removeChild(log.children(&li&)[0]);
function getTime() {
var now= new Date(),
h=now.getHours(),
m=now.getMinutes(),
s=now.getSeconds(),
ms=now.getMilliseconds();
return (h+&:&+m+&:&+s+ & & +ms);
//是否显示编辑按钮
function &showRenameBtn(treeId, treeNode){
//获取节点所配置的noEditBtn属性值
if(treeNode.noEditBtn != undefined && treeNode.noEditBtn){
//是否显示删除按钮
function showRemoveBtn(treeId, treeNode){
//获取节点所配置的noRemoveBtn属性值
if(treeNode.noRemoveBtn != undefined && treeNode.noRemoveBtn){
var newCount = 1;
function addHoverDom(treeId, treeNode) {
//在addHoverDom中判断第0级的节点不要显示“新增”按钮
if(treeNode.level === 0){
//给节点添加&新增&按钮
var sObj = $(&#& + treeNode.tId + &_span&);
if (treeNode.editNameFlag || $(&#addBtn_&+treeNode.id).length&0)
var addStr = &&span class='button add' id='addBtn_& + treeNode.id
+ &' title='add node' onfocus='this.blur();'&&/span&&;
sObj.after(addStr);
var btn = $(&#addBtn_&+treeNode.id);
if (btn) btn.bind(&click&, function(){
var zTree = $.fn.zTree.getZTreeObj(&treeDemo&);
zTree.addNodes(treeNode, {id:(100 + newCount), pId:treeNode.id, name:&new node& + (newCount++)});
function removeHoverDom(treeId, treeNode) {
$(&#addBtn_&+treeNode.id).unbind().remove();
function selectAll() {
var zTree = $.fn.zTree.getZTreeObj(&treeDemo&);
zTree.setting.edit.editNameSelectAll = &$(&#selectAll&).attr(&checked&);
$(document).ready(function(){
$.fn.zTree.init($(&#treeDemo&), setting, zNodes);
$(&#selectAll&).bind(&click&, selectAll);
&style type=&text/css&&
.ztree li span.button.add {margin-left:2 margin-right: -1 background-position:-144px 0; vertical-align: *vertical-align:middle}
&h1&高级 增 / 删 / 改 节点&/h1&
&h6&[ 文件路径: exedit/edit_super.html ]&/h6&
&div class=&content_wrap&&
&div class=&zTreeDemoBackground left&&
&ul id=&treeDemo& class=&ztree&&&/ul&
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&& & 方法一:根据是否有子结点进行改变& & 复制代码代码如下:& & & & @namespace s "library:///flex/spark";& & @namespace mx "library:///flex/mx";& & mx|Tree{& & /*去掉默认文件夹图标*/& & folderClosedIcon: Embed(source='resource/region.png');& & folderOpenIcon: Embed(source='resource/region.png');& & /*去掉叶子节点图标& & defaultLeafIcon: ClassReference(null);& & */& & /*& & defaultLeafIcon 指定叶图标& & disclosureClosedIcon 指定的图标旁边显示一个封闭的分支节点。默认的图标是一个黑色三角形。& & disclosureOpenIcon 指定的图标旁边显示一个开放的分支节点。默认的图标是一个黑色三角形。& & folderClosedIcon 关闭指定的文件夹图标的一个分支节点。& & folderOpenIcon 指定打开的文件夹图标的一个分支节点。& & 例:三角图标修改如下代码使用即可换成自己的了:& & disclosureOpenIcon:Embed(source='resource/region.png');& & disclosureClosedIcon:Embed(source='resource/region.png');& & */& & }& & & & 方法二:根据结点的属性,灵活改变图标& & 复制代码代码如下:& & & & <s:Application xmlns:fx="/mxml/2009"& & xmlns:s="library:///flex/spark"& & xmlns:mx="library:///flex/mx" minWidth="955" minHeight="600">& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & <mx:Tree left="5" top="5" bottom="5" width="150" dataProvider="{treeData}"& & id="myTree"& & showRoot="false"& & labelField="@label"& & itemRenderer="com.flex.tree.dynamicicontree.IconTreeRenderer">& & & & & & package com.flex.tree.dynamicicontree& & {& & import flash.xml.*;& & import mx.collections.*;& & import mx.controls.I& & import mx.controls.listClasses.*;& & import mx.controls.treeClasses.*;& & import mx.styles.StyleM& & /*& & * ICON Tree的渲染器& & */& & public class IconTreeRenderer extends TreeItemRenderer& & {& & protected var myImage:ImageR& & private var imageWidth:Number = 16;& & private var imageHeight:Number = 16;& & private static var defaultImg:String = "windows.png";& & public function IconTreeRenderer ()& & {& & super();& & }& & override protected function createChildren():void& & {& & super.createChildren();& & myImage = new ImageRenderer();& & myImage.source = defaultI& & myImage.width=imageW& & myImage.height=imageH& & myImage.setStyle( "verticalAlign", "middle" );& & addChild(myImage);& & }& & //通过覆盖data方法来动态设置tree的节点图标& & override public function set data(value:Object):void& & {& & super.data =& & var imageSource:String=value.@iconName.toString();& & if(imageSource!="")& & {& & myImage.source=imageS& & }else{& & myImage.source=defaultI& & }& & }& & //隐藏原有图标,并设置它的坐标& & override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void& & {& & super.updateDisplayList(unscaledWidth, unscaledHeight);& & if(super.data !=null)& & {& & if (super.icon != null)& & {& & myImage.x = super.icon.x;& & myImage.y = 2;& & super.icon.visible=& & }& & else& & {& & myImage.x = super.label.x;& & myImage.y = 2;& & super.label.x = myImage.x + myImage.width + 17;& & }& & }& & }& & }& & }& & package com.flex.tree.dynamicicontree& & {& & import mx.controls.I& & public class ImageRenderer extends Image& & {& & private var defaultURL:String = "assets/icon/";& & public var iconName:S& & public function ImageRenderer()& & {& & super();& & }& & override public function set source(url:Object):void{& & super.source = defaultURL +& & iconName = url as S& & }& & }& & }& & QQ空间
百度搜藏更多& & Tags:Flex 树结点图标& & 复制链接收藏本文打印本文关闭本文返回首页& & 上一篇:Flex正则表达式判断中文或全角字符代码& & 下一篇:flex小技巧之加载GIF图片& & 相关文章flex中如何用图像给按钮做皮肤flex打印操作(FlexPrintJob)还有分页打印操作具体实现flex中使用RadioButtonGroup时取出所选项的值的方法datagrid不可编辑行有关问题的控制方法FLEX HashMap遍历并取到需要的值Flex动态生成可编辑的DataGrid具体实现代码flex4.5中CSS选择器的应用小结Flex 改变树结点图标的2种方法介绍flex导出excel具体实现Flex中TabNavigator设置Tabs样式思路及源码& & 文章评论& & 最 近 更 新& & Flex上传本地图片并提前浏览的实现方法flex利用webservice上传照片实现代码Flex3 DataGrid拖拽到ClumnChart动态显示Flex中如何动态生成DataGrid以及动态生成datagrid不可编辑行有关问题的控制方法flex中event.preventDefault()方法取消事flex中使用RadioButtonGroup时取出所选项Flex自定义右键菜单具体实现flex渐变色制作圆角橙色按钮示例代码Flex DataGrid自动编号示例& & 热 点 排 行& & flex与js通信与彼此之间的互调整Flex Label自动截取、自动换行代flex4 panel去掉标题设置透明度效flex复选框和下拉列表的几种用法Flex自定义右键菜单具体实现Flex帮助文档(html格式)制作及ASflex与js通信与彼此之间的互调整在Flex(Flash)中嵌入HTML代码或页Flex Label控件竖排显示文字的实flex中event.preventDefault()方
声明:该文章系网友上传分享,此内容仅代表网友个人经验或观点,不代表本网站立场和观点;若未进行原创声明,则表明该文章系转载自互联网;若该文章内容涉嫌侵权,请及时向
论文写作技巧
上一篇:下一篇:
相关经验教程& VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)
VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)
&&&&&& 前面一节讲了,本节继续讲下半部分,包括树形控件的创建、CTreeCtrl类的主要成员函数和应用实例。&&&&&& 树形控件的创建&&&&&& 为树形控件提供了CTreeCtrl类,它封装了树形控件的所有操作。&&&&&& 树形控件的创建也是有两种方式,一种是在对话框模板中直接拖入Tree Control控件创建,另一种就是通过CTreeCtrl类的Create成员函数创建。下面主要讲后者。&&&&&& CTreeCtrl类的Create成员函数的原型如下:&&&&&&&virtual BOOL Create(&&&&&&&&&&&&& DWORD dwStyle,&&&&&&&&&&&&& const RECT& rect,&&&&&&&&&&&&&&CWnd* pParentWnd,&&&&&&&&&&&&& UINT nID&&&&&&& );&&&&&& 此函数的原型与前面讲到的所有控件类的Create函数都类似。dwStyle指定树形控件风格的组合,rect指定树形控件窗口的位置和大小,pParentWnd为指向树形控件父窗口的指针,nID指定树形控件的ID。下面还是主要讲讲树形控件的主要风格以及含义。&&&&&& TVS_DISABLEDRAGDROP:禁止树形控件发送TVN_BEGINDRAG通知消息,即不支持拖动操作&&&&&& TVS_EDITLABELS:用户可以编辑节点的标签文本&&&&&& TVS_HASBUTTONS:显示带有"+"或"-"的小方框来表示某项能否被展开或已展开&&&&&& TVS_HASLINES:在父节点与子节点间连线以更清晰地显示树的结构&&&&&& TVS_LINESATROOT:在根节点处连线&&&&&& TVS_SHOWSELALWAYS:即使控件失去输入焦点,仍显示出项的选择状态&&&&&& 同样,动态创建树形控件时,除了能够指定上述风格的组合外,一般还要指定WS_CHILD和WS_VISIBLE风格。&&&&&& 在中直接拖入Tree Control创建树形控件时,可以在树形控件的属性页中设置其风格,与上面的风格是对应的,例如,属性Has Lines对应的就是TVS_HASLINES风格。&&&&&&&CTreeCtrl类的主要成员函数&&&&&& CImageList* SetImageList(CImageList * pImageList,int nImageListType);&&&&&& 如果树节点需要显示图标时,则必须先创建一个CImageList类的对象,并为其添加多个图像组成一个图像序列,然后调用SetImageList函数为树形控件设置图像序列,在用InsertItem插入节点时传入所需图像在图像序列中的索引即可。后面的例子中会演示。参数pImageList为指向图像序列类CImageList的对象的指针,若为NULL则删除树形控件的所有图像。参数nImageListType指定图像序列的类型,可以是TVSIL_NORMAL(普通图像序列)或TVSIL_STATE(状态图像序列,用图像表示节点的状态)。&&&&&& UINT GetCount( )&&&&&& 获取树形控件中节点的数量。&&&&&& DWORD_PTR GetItemData(HTREEITEM hItem)&&&&&& 获取树形控件中某个指定节点的附加32位数据。参数hItem为指定的树节点的句柄。&&&&&& BOOL SetItemData(HTREEITEM hItem,DWORD_PTR dwData);&&&&&& 为树形控件中某个指定节点设置附加的32位数据。参数hItem同上,dwData为要设置的32位数据。&&&&&& CString GetItemText(HTREEITEM hItem)&&&&&& 获取树形控件中某个指定节点的标签文本。参数hItem同上。返回值是包含标签文本的字符串。&&&&&& BOOL SetItemText(HTREEITEM hItem,LPCTSTR lpszItem);&&&&&& 为树形控件中某个指定节点设置标签文本。参数hItem同上,lpszItem为包含标签文本的字符串的指针。&&&&&& HTREEITEM GetNextSiblingItem(HTREEITEM hItem)&&&&&& 获取树形控件中某个指定节点的下一个兄弟节点。参数hItem同上。返回值是下一个兄弟节点的句柄。&&&&&& HTREEITEM GetPrevSiblingItem(HTREEITEM hItem)&&&&&& 获取树形控件中某个指定节点的上一个兄弟节点。参数hItem同上。返回值是上一个兄弟节点的句柄。&&&&&& HTREEITEM GetParentItem(HTREEITEM hItem)&&&&&& 获取树形控件中某个指定节点的父节点。参数hItem同上。返回值是父节点的句柄。&&&&&& HTREEITEM GetRootItem( )&&&&&& 获取树形控件根节点的句柄。&&&&&& HTREEITEM GetSelectedItem( )&&&&&& 获取树形控件当前选中节点的句柄。&&&&&& BOOL DeleteAllItems( );&&&&&& 删除树形控件中的所有节点。删除成功则返回TRUE,否则返回FALSE。&&&&&& BOOL DeleteItem(HTREEITEM hItem);&&&&&& 删除树形控件中的某个节点。参数hItem为要删除的节点的句柄。删除成功则返回TRUE,否则返回FALSE。&&&&&& HTREEITEM InsertItem(LPCTSTR lpszItem,int nImage,int nSelectedImage,HTREEITEM hParent = TVI_ROOT,HTREEITEM hInsertAfter = TVI_LAST);&&&&&& 在树形控件中插入一个新节点。参数lpszItem为新节点的标签文本字符串的指针,参数nImage为新节点的图标在树形控件图像序列中的索引,参数nSelectedImage为新节点被选中时的图标在图像序列中的索引,参数hParent为插入节点的父节点的句柄,参数hInsertAfter为新节点的前一个节点的句柄,即新节点将被插入到hInsertAfter节点之后。&&&&&& BOOL SelectItem(HTREEITEM hItem);&&&&&& 选中指定的树节点。参数hItem为要选择的节点的句柄。若成功则返回TRUE,否则返回FALSE。&&&&&& 树形控件的应用实例&&&&&&&最后鸡啄米还是给大家写一个简单的实例,说明CListCtrl类的几个成员函数及树形控件通知消息等的使用方法。&&&&&& 此实例实现的功能:在一个树形控件中显示鸡啄米网站的简单结构分层,共有三层,分别为鸡啄米网站、各个分类和文章。用鼠标左键单击改变选中节点后,将选中节点的文本显示到中。另外,还要实现一个常见的效果,就是鼠标划过除根节点外的某个树节点时,显示相应的Tip提示信息。下面是具体实现步骤:&&&&&& 1. 创建一个基于对话框的MFC工程,名称设置为&Example31&。&&&&&& 2. 在自动生成的对话框模板IDD_EXAMPLE31_DIALOG中,删除&TODO: Place dialog controls here.&、&OK&按钮和&Cancel&按钮。添加一个Tree Control控件,ID设置为IDC_WEB_TREE,属性Has Buttons、Has Lines和Lines At Root都设为True,为了在鼠标划过某个节点时显示提示信息还需要将Info Tip属性设为True。再添加一个静态文本框和一个编辑框,静态文本框的Caption属性设为&您选择的节点:&,编辑框的ID设为IDC_ITEM_SEL_EDIT,Read Only属性设为True。此时的对话框模板如下图:&&&&&& 3. 导入需要为树形控件的节点添加的图标。鸡啄米在这里找了三个32x32的Icon图标,保存到工程的res目录下。然后在Resource View资源视图中,右键点击Icon节点,在右键菜单中选择&Add Resource...&,弹出&Add Resource&对话框,再从左边&Resource type&列表中选择&Icon&,点击右边的&Import...&按钮,就可以选择三个图标文件进行导入了。导入成功后,分别修改它们ID为IDI_WEB_ICON、IDI_CATALOG_ICON和IDI_ARTICLE_ICON。&&&&&& 4. 为树形控件IDC_WEB_TREE添加CTreeCtrl类型的控件变量m_webTree。并在Example31Dlg.h文件中为CExample31Dlg类添加成员对象:CImageList m_imageL。&&&&&& 5. 在对话框初始化时,我们在树形控件中添加鸡啄米网站的树形结构,那么需要修改CExample31Dlg::OnInitDialog()函数为:
BOOL&CExample31Dlg::OnInitDialog() &&
&&&&CDialogEx::OnInitDialog(); &&
&&&&&&&&&......略 &&
&&&&HICON&hIcon[3];&&&&&&&&
&&&&HTREEITEM&hR&&&&&&&
&&&&HTREEITEM&hCataI&&&
&&&&HTREEITEM&hArtI&&&&
&&&&hIcon[0]&=&theApp.LoadIcon(IDI_WEB_ICON); &&
&&&&hIcon[1]&=&theApp.LoadIcon(IDI_CATALOG_ICON); &&
&&&&hIcon[2]&=&theApp.LoadIcon(IDI_ARTICLE_ICON); &&
&&&&m_imageList.Create(32,&32,&ILC_COLOR32,&3,&3); &&
&&&&for&(int&i=0;&i&3;&i++) &&
&&&&&&&&m_imageList.Add(hIcon[i]); &&
&&&&m_webTree.SetImageList(&m_imageList,&TVSIL_NORMAL); &&
&&&&hRoot&=&m_webTree.InsertItem(_T(&鸡啄米&),&0,&0); &&
&&&&hCataItem&=&m_webTree.InsertItem(_T(&IT互联网&),&1,&1,&hRoot,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hCataItem,&1); &&
&&&&hArtItem&=&m_webTree.InsertItem(_T(&百度文章1&),&2,&2,&hCataItem,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hArtItem,&2); &&
&&&&hArtItem&=&m_webTree.InsertItem(_T(&谷歌文章2&),&2,&2,&hCataItem,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hArtItem,&3); &&
&&&&hCataItem&=&m_webTree.InsertItem(_T(&数码生活&),&1,&1,&hRoot,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hCataItem,&4); &&
&&&&hArtItem&=&m_webTree.InsertItem(_T(&智能手机文章1&),&2,&2,&hCataItem,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hArtItem,&5); &&
&&&&hArtItem&=&m_webTree.InsertItem(_T(&平板电脑文章2&),&2,&2,&hCataItem,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hArtItem,&6); &&
&&&&hCataItem&=&m_webTree.InsertItem(_T(&软件开发&),&1,&1,&hRoot,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hCataItem,&7); &&
&&&&hArtItem&=&m_webTree.InsertItem(_T(&C++编程入门系列1&),&2,&2,&hCataItem,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hArtItem,&8); &&
&&&&hArtItem&=&m_webTree.InsertItem(_T(&VS2010/MFC编程入门2&),&2,&2,&hCataItem,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hArtItem,&9); &&
&&&&hCataItem&=&m_webTree.InsertItem(_T(&娱乐休闲&),&1,&1,&hRoot,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hCataItem,&10); &&
&&&&hArtItem&=&m_webTree.InsertItem(_T(&玛雅文明文章1&),&2,&2,&hCataItem,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hArtItem,&11); &&
&&&&hArtItem&=&m_webTree.InsertItem(_T(&IT笑话2&),&2,&2,&hCataItem,&TVI_LAST); &&
&&&&m_webTree.SetItemData(hArtItem,&12); &&
&&&&return&TRUE;&&&&
}&&&&&&&& 6. 我们希望在选中节点改变时,将最新的选择项实时显示到编辑框中,那么可以响应TVN_SELCHANGED通知消息。为树形控件IDC_WEB_TREE的通知消息TVN_SELCHANGEDCExample31Dlg::OnTvnSelchangedWebTree,并修改函数体如下:
void&CExample31Dlg::OnTvnSelchangedWebTree(NMHDR&*pNMHDR,&LRESULT&*pResult) &&
&&&&LPNMTREEVIEW&pNMTreeView&=&reinterpret_cast&LPNMTREEVIEW&(pNMHDR); &&
&&&&*pResult&=&0; &&
&&&&CString&strT&&&
&&&&HTREEITEM&hItem&=&m_webTree.GetSelectedItem(); &&
&&&&strText&=&m_webTree.GetItemText(hItem); &&
&&&&SetDlgItemText(IDC_ITEM_SEL_EDIT,&strText); &&
}&&&&&&&& 7. 还有一个功能需要实现,那就是鼠标划过除根节点外的某个树节点时,显示相应的Tip提示信息,本实例中提示信息为节点的编号。这需要响应TVN_GETINFOTIP通知消息。为树形控件IDC_WEB_TREE的通知消息TVN_GETINFOTIP添加消息处理函数CExample31Dlg::OnTvnGetInfoTipWebTree,并修改函数体如下:
void&CExample31Dlg::OnTvnGetInfoTipWebTree(NMHDR&*pNMHDR,&LRESULT&*pResult) &&
&&&&LPNMTVGETINFOTIP&pGetInfoTip&=&reinterpret_cast&LPNMTVGETINFOTIP&(pNMHDR); &&
&&&&*pResult&=&0; &&
&&&&NMTVGETINFOTIP*&pTVTipInfo&=&(NMTVGETINFOTIP*)pNMHDR;&&&&&
&&&&HTREEITEM&hRoot&=&m_webTree.GetRootItem();&&&&&&&&
&&&&CString&strT&&&&&&&
&&&&if&(pTVTipInfo-&hItem&==&hRoot) &&
&&&&&&&&&&
&&&&&&&&strText&=&_T(&&); &&
&&&&else&&
&&&&&&&&&&
&&&&&&&&strText.Format(_T(&%d&),&pTVTipInfo-&lParam); &&
&&&&wcscpy(pTVTipInfo-&pszText,&strText); &&
}&&&&&&&& 8. 运行程序,弹出结果对话框。效果如下图:&&&&&&&树形控件的知识就讲到这里了,相比之前的控件可能稍有复杂。不过用的多了,就会觉得得心应手了。鸡啄米欢迎大家继续关注后面的VS2010/MFC编程入门教程。
除非特别注明,文章均为原创
转载请标明本文地址:
作者:鸡啄米
&&( 20:22:53)&&( 20:35:57)&&( 21:47:5)&&( 22:36:38)&&( 21:53:33)&&( 0:49:15)&&( 23:21:17)&&( 21:47:59)&&( 0:24:18)&&( 0:15:31)
内容详细,已经做了一遍,呵呵,非常感谢!期待后面的课程鸡啄米 于
23:12:47 回复嗯,做实例印象更深刻,而且理解也更到位
代码可真的是太多了,真的不太好弄。先收着了,谢谢博主分享!
编程不会啊
学习了,期待后面的课程
好多代码,我凌乱了
请教一下,第一段代码里第18行的m_imageList是在哪里创建的? 鸡啄米 于
22:10:26 回复这个好像是我忘记讲了,是在Example31Dlg.h文件中定义的。实例的第4步中我已经做了补充说明。谢谢你的细心和反馈。ss 于
12:36:17 回复中间省略的是什么内容呢
第7步中“wcscpy(pTVTipInfo-&pszText, strText);“ 在vs2012下提示错误(有安全隐患), 我改成 ”wcscpy_s(pTVTipInfo-&pszText, 32, strText);“后编译通过,望解答。鸡啄米 于
23:09:34 回复提示的是警告,可以运行的。wcscpy_s是wcscpy的安全版本。keke2014 于
14:40:24 回复谢谢老师解答,不过的确是error,不是warning,然后我根据提示在“预处理器定义”里加入_CRT_SECURE_NO_WARNINGS后才ok
提示的内容,怎么显示在鼠标的右边呢.
您好,米哥,我想取消子节点与父节点的缩进,请问应该如何做啊!谢谢啊!鸡啄米 于
23:29:24 回复mfc的树控件应该不行,你要是必须要那种效果的,可以自己用List Control实现,就是麻烦点
你好:初始化时下面的这段代码是什么意思?麻烦详细解释一下其中Creat函数的各个参数;还有就是句柄的创建(声明)
谢谢!!!!
// 创建图像序列CImageList对象
m_imageList.Create(32, 32, ILC_COLOR32, 3, 3);
您好,我完全是按照上面的例子进行的,但是最后一段程序好像没有任何作用。程序运行没有问题,但是鼠标滑过节点的时候没有提示信息显示,请问可能是什么原因呢?谢谢。鸡啄米 于
23:36:40 回复树控件的Info Tip属性需要设置为true
虽然没有自己敲完这些代码,但感觉还是学习到了
不过希望楼主能够提供MFC与数据库关联的小程序
我随便找了三个32*32的PNG图标,没有加载上去,请问一下这是什么问题呢?nianhuadefo 于
13:52:13 回复不同格式的图,加载上有区别的吧?bmp图 用LoadBitMap
Error 1 error C2664: 'wcscpy_s' : cannot convert parameter 1 from 'LPSTR' to 'wchar_t *' d:\projects\example31\example31dlg.cpp 279 1 Example31请问楼主,这种问题怎么解决呢?考拉 于
10:33:46 回复wcscpy和wcscpy_s是宽字符版本(Unicode),应该是你创建工程的时候没有选用Unicode库,可以把wcscpy(pTVTipInfo-&pszText, strText)改成strcpy(pTVTipInfo-&pszText,
strText);继续在米哥在学习,支持米哥!
它运行时说m_imageList是未被定义的。。。
error C2065: 'theApp' : undeclared identifier 怎么办?QING 于
18:41:36 回复使用AfxGetApp()
获得theApp指针。。。// 加载三个图标,并将它们的句柄保存到数组
hIcon[0] = AfxGetApp()-&LoadIcon(IDI_WEB_ICON);
hIcon[1] = AfxGetApp()-&LoadIcon(IDI_CATALOG_ICON);
hIcon[2] = AfxGetApp()-&LoadIcon(IDI_ARTICLE_ICON);
忽然间找到了学习的方向。。。谢谢你的无私奉献
您好,米哥,我创建的是有数据库支持的多文档MFC程序,用它默认的那个对话框IDD_工程名_FORM,然后自己添加的对话框类,按照这个方法编程之后树控件显示不出来,请问是怎么回事啊?求解答
不知道诸位时候遇到这样的问题,想要加载的图像显示不出来,我选用的图像格式为.png格式的图片不知道是不是图片格式的问题。另外,我还遇到了另外一个问题:当鼠标划过树节点时并没有触发TVN_GETINFOTIP事件,这令我非常费解,我在那段代码上设置断点,结果什么反应都没。不知道大家遇到过类似的问题吗?CiCi 于
21:06:53 回复经过一天的努力终于找到问题的根源,下面我简单解释一下问题的根源:在MFC资源视图中我们可以发现很多文件夹,这些文件夹实际上是有一些学问的。这里我只对icon文件夹进行论述,icon文件添加的图片资源后缀名.ico(Pay Attention)其实资源ID在这里起到很大的提示作用,icon文件夹内部资源的默认ID的前缀为IDI----ID代表资源编号,I则代表icon即.ico类型文件。引入图标文件类型为.ico就完事OK了
昨天我提到&当鼠标划过树节点时并没有触发TVN_GETINFOTIP事件&这个问题,现在我纠正一下,博主所写的办法完全正确,问题是:我忘记将Tip Info属性设置为true了,那这条属性的含义应为:是否显示提示信息。在此,我对于昨天的问题进行纠正。
谢谢您的无私奉献,我跟着您的教材到这了,有个疑问,就是这个例子如何加上滚动条控件Scroll Bar(因为下拉现实不全)虽然那个例子跟着做了,但是想加在这里,没思维了。
米哥,我按照你描述的步骤做了,能运行出来,不过不知道为什么,我的图标看不见;physu 于
16:04:53 回复首先,非常感谢鸡啄米先生,你是我们共同的老师!谢谢你!wcscpy报错的问题,按照上面那位同学的改法就可以运行。而图片没出来的,可能是你加载的图片格式有问题,放到res文件夹里的图片格式应该是.ico格式的图片,其实也是位图的一种。我一开始用的.png格式的图片,搞了半天,结果不行。小龟 于
12:42:40 回复你好,我截了三张图片,并命名为1.ico,2.ico,3.ico,放在了res文件夹里,然后导入,但是还是运行图片还是出不来,请问这是什么问题呢?谢谢你!
如果想要点击树形图的一个选项 在然后点击不同按钮对其进行不同操作
要怎么做?
m_imageList.Create(32, 32, ILC_COLOR32, 3, 3)// 创建图像序列CImageList对象 求解这句话怎么理解
我用的是visual studio 2013,插入图片资源后找不到ID啊,属性页那里根本没有ID这个项目,哪位朋友也是用2013的支一下招。小方 于
16:40:02 回复在资源视图那栏,点开向右的三角形,按上边的例子,右键Icon添加资源,添加完成后再点击你添加的资源,在下面属性框那里就可以修改资源ID了。小方 于
16:50:00 回复最后一句老是出错不知怎么解决error C2660: “wcscpy_s”: 函数不接受 2 个参数 按照16楼改成后strcpy(pTVTipInfo-&pszText, strText);还是有错误
error C2664: “char *strcpy(char *,const char *)”: 无法将参数 1 从“LPWSTR”转换为“char *”望各位指教。
语言通俗易懂,非常好理解!谢谢鸡啄米!
在运行时提醒:
erro LINK1123:转到COFF期间失败:文件无效或损坏解决不了希望楼主能帮我解答下 谢谢!
米哥好,我想问下,如何在树形控件中加入右键操作呢,我已经在树形控件外添加入了右键操作,但是树形控件如何加入右键消息响应啊?秋风 于
17:02:51 回复自问自答了:在树形控件的控件事件上找到NM_RCLICK,并添加事件,代码如下: CM
// 菜单(包含主菜单栏和子菜单)
CMenu *pSubM
// 右键菜单
// 加载菜单资源到menu对象
menu.LoadMenu(IDR_MENU1);
// 因为右键菜单是弹出式菜单,不包含主菜单栏,所以取子菜单
pSubMenu = menu.GetSubMenu(0);
// 将坐标值由客户坐标转换为屏幕坐标
//ClientToScreen(&point);
GetCursorPos(&point);
// 弹出右键菜单,菜单左侧与point.x坐标值对齐
pSubMenu-&TrackPopupMenu(TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON, point.x, point.y, this);
*pResult = 0;即可实现在树形控件的区域右键效果。右键的菜单还是要按照米哥上面介绍的方式添加。
可以获得文本,需要value,怎么添加和获得呢?
很不错,这一节比较难,用一天时间来消化了个大概。
编译正确 info属性也设置了
但还是不能实现鼠标划过节点就提示信息zux1994 于
15:55:00 回复树控件的Info Tip属性需要设置为true,作者忘了在文章里添加zux1994 于
15:56:39 回复一直学习,慢慢觉得看懂很多,真心良心博主
完全随机文章}

我要回帖

更多关于 easyui tree 展开节点 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信