日期:2011-03-22 13:56:00 来源:本站整理
若何禁用一个树节点(Disable Tree Node)[VC/C++编程]
本文“若何禁用一个树节点(Disable Tree Node)[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
TTreeView是VCL中供应的树列表控件,树的每个节点是一个TTreeNode类,TTreeNode组件的属性和办法可以参考Borland供应的帮忙(固然不如MSDN全面,但有总比没有强).实际利用中我们大概需求禁用某个节点(界面上反映的效果是:节点字体呈灰色显示,节点无法选中等).但是VCL没有供应Node->Disable();或Node->Enable=false;这样的功效,我们只好自己着手实现了.首先我们需求为每个节点设定一个标志,用来标识此节点能否可用,标识办法有很多,比方判断节点的文本(Text),节点的绝对索引值(AbsoluteIndex),节点的索引(Index)加缩进(Indent)等,在本例中我们用节点的Data属性作标识(一个void *型数据,其实可以存放N多东西).假如在你的利用中刚好用了Data属性,就别的想个用来作标志的办法吧.:)
我们写一个自定义函数,用来启用/禁用一个节点:
//---------------------------------------------------------------------------
//函数功效:改变指定节点的启用/禁用状况
// bEnable:启用:true;禁用:false
// pNode:要改变状况的节点
void__fastcallCrnEnableTreeNode(boolbEnable,TTreeNode*pNode)
{
//设定法则,假如节点答应利用,Node的Data存放0(默许就是0),
//假如禁用,Data存放0xFFFF
pNode->Data=bEnable?NULL:(void*)0xFFFF;
//标志改变后重绘一下TreeView
// 本文转自 C++Builder 研究 - http://www.ccrun.com/article.asp?i=1015&d=r2tf61
pNode->TreeView->Invalidate();
}
然后考虑若何到达禁用节点的效果,前面说了,我们只需实现这两个效果:
1.节点字体呈灰色显示
2.节点无法选中
节点字体呈灰色显示可以通过TreeView的OnCustomDrawItem事件中的自绘实现,在计划时状况,选中TreeView,Events选项卡双击OnCustomDrawItem事件,增添以下代码:
//---------------------------------------------------------------------------
void__fastcallTForm1::TreeView1CustomDrawItem(TCustomTreeView*Sender,
TTreeNode*Node,TCustomDrawStateState,bool&DefaultDraw)
{
//判断当前绘制节点能否被禁用
// 63 63 72 75 6E 2E 63 6F 6D
if(int(Node->Data)==0xFFFF)
{
//假如节点被禁用则用灰色字体显示,默许为黑色
Sender->Canvas->Font->Color=clGray;
}
}
节点无法选中则可以通过TreeView的Changing事件来处理,在计划时状况,选中TreeView,Events选项卡双击OnChanging事件,增添以下代码:
//---------------------------------------------------------------------------
void__fastcallTForm1::TreeView1Changing(TObject*Sender,TTreeNode*Node,
bool&AllowChange)
{
//欲选中这个节点时,判断假如当前节点被禁用则禁止改变原节点的挑选状况 本文发表于http://bianceng.cn(编程入门网)
AllowChange=(int(Node->Data)!=0xFFFF);
}
有以上的实现,效果基本就出来了:
测试代码:
//---------------------------------------------------------------------------
void__fastcallTForm1::Button1Click(TObject*Sender)
{
//禁用当前选中的节点
if(TreeView1->Selected)
CrnEnableTreeNode(true,TreeView1->Selected);
}
//---------------------------------------------------------------------------
void__fastcallTForm1::Button2Click(TObject*Sender)
{
//启用第二个节点
CrnEnableTreeNode(true,TreeView1->Items->Item[1]);
}
//---------------------------------------------------------------------------
为看到对比好的效果,可在测试时展开全部节点为:
TreeView1->FullExpand();
以上是“若何禁用一个树节点(Disable Tree Node)[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论