社区
C++ Builder
帖子详情
如何在 TreeView 控件的每一个节点的左边增加一个 CheckBox,就像有些杀毒软件选取驱动器一样
ddsft
2003-05-13 01:29:53
如何在 TreeView 控件的每一个节点的左边增加一个 CheckBox,就像有些杀毒软件选取驱动器一样
望高手赐教!!!
...全文
43
7
打赏
收藏
如何在 TreeView 控件的每一个节点的左边增加一个 CheckBox,就像有些杀毒软件选取驱动器一样
如何在 TreeView 控件的每一个节点的左边增加一个 CheckBox,就像有些杀毒软件选取驱动器一样 望高手赐教!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yesry
2003-08-28
打赏
举报
回复
sc
yesry
2003-05-13
打赏
举报
回复
gz
BCB
2003-05-13
打赏
举报
回复
这个程序我也最近用到,基本的功能是CSDN上其它人的贴子抄过来的,
我扩充了一下,成功了,我得意了几天 :)
这个 CheckedChanged 的通知消息肯定有更好的办法,但我不会,也查不到,
不过这样已不错了
ddsft
2003-05-13
打赏
举报
回复
BCB(天下三分明月夜,二分无赖是扬州) ,你的这个程序写得非常好,虽然实现的方法是你自创的;但的确是个好程序!!
BCB
2003-05-13
打赏
举报
回复
上面程序我非常满意,唯一问题是无法直接知道用户是否改变了
哪一个节点的Checked状态(缺少通知事件),所以我想了个办法,
用了两个事件进行比较:
TreeView1MouseMove ,TreeView1MouseDown
才解决,已经非常象杀毒软件的选目录操作了
BCB
2003-05-13
打赏
举报
回复
我上次搞清楚了,我有完整的
void __fastcall TForm1::FormCreate(TObject *Sender)
{
SetWindowLong(TreeView1->Handle,GWL_STYLE,
GetWindowLong(TreeView1->Handle,GWL_STYLE) | TVS_CHECKBOXES);
}
//判断一个节点是否处于Checked状态
bool GetNodeChecked(TTreeNode *ANode)
{
TVITEM tvItem;
tvItem.mask = TVIF_HANDLE | TVIF_STATE;
tvItem.hItem = ANode->ItemId;
tvItem.stateMask = TVIS_STATEIMAGEMASK;
TreeView_GetItem(ANode->TreeView->Handle, &tvItem);
return ((BOOL)(tvItem.state >> 12) -1);
}
//设置一个节点为Checked状态或者Unchecked状态,由参数IsSetToChecked来确定
void SetNodeChecked(TTreeNode *ANode,bool IsSetToChecked)
{
TVITEM tvItem;
tvItem.mask = TVIF_HANDLE | TVIF_STATE;
tvItem.hItem = ANode->ItemId;
tvItem.stateMask = TVIS_STATEIMAGEMASK;
tvItem.state = INDEXTOSTATEIMAGEMASK(IsSetToChecked?2:1);
TreeView_SetItem(ANode->TreeView->Handle, &tvItem);
}
void SetChildChecked(TTreeNode *ANode,bool yn)
{ // 把它的子孙都置成一样
int count=ANode->Count;
SetNodeChecked(ANode,yn);
if (count!=0)
for (int i=0;i<count;i++)
SetChildChecked(ANode->Item[i],yn);
}
TTreeNode *ClickNode; // 保存点中的节点
bool NodeChecked; // 保存点中的节点checked
void __fastcall TForm1::TreeView1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
ClickNode=TreeView1->GetNodeAt(X,Y);
if (ClickNode!=NULL) // 保存原节点的Checked值
NodeChecked=GetNodeChecked(ClickNode);
}
void __fastcall TForm1::TreeView1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if (ClickNode!=NULL)
if (GetNodeChecked(ClickNode)!=NodeChecked)
{ // 把它的子孙都置成一样
NodeChecked=!NodeChecked; // 更新它
SetChildChecked(ClickNode,NodeChecked);
}
}
你先建手工一个TreeView1的若干节点,用上面的程序一看,
象不象,
GaoLun
2003-05-13
打赏
举报
回复
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
SetWindowLong(TV1->Handle,GWL_STYLE,
GetWindowLong(TV1->Handle,GWL_STYLE) | TVS_CHECKBOXES);
}
//---------------------------------------------------------------------------
//判断一个节点是否处于Checked状态
bool __fastcall TForm1::IsCheckedNode(TTreeNode *ANode)
{
TVITEM tvItem;
tvItem.mask = TVIF_HANDLE | TVIF_STATE;
tvItem.hItem = ANode->ItemId;
tvItem.stateMask = TVIS_STATEIMAGEMASK;
TreeView_GetItem(TV1->Handle, &tvItem);
return ((BOOL)(tvItem.state >> 12) -1);
}
//---------------------------------------------------------------------------
//设置一个节点为Checked状态或者Unchecked状态,由参数IsSetToChecked来确定
void __fastcall TForm1::SetCheckedNode(TTreeNode *ANode,bool IsSetToChecked)
{
TVITEM tvItem;
tvItem.mask = TVIF_HANDLE | TVIF_STATE;
tvItem.hItem = ANode->ItemId;
tvItem.stateMask = TVIS_STATEIMAGEMASK;
tvItem.state = INDEXTOSTATEIMAGEMASK(IsSetToChecked ? 2 : 1);
TreeView_SetItem(TV1->Handle, &tvItem);
}
//---------------------------------------------------------------------------
delphi
控件
使用
1- Tlistbox
控件
重要属性items.* 举例,界面设计如下左,执行结果如下右: 代码为 procedure TForm1.Button1Click(Sender: TObject); begin edit1.Text := listbox1.Items.CommaText; edit2.Text := ...
保姆级跟学VISualstudio窗体画面制作教程
窗体也是对象,窗体类定义了生成窗体的模板,每实例化
一个
窗体类,就产生
一个
窗体。所有图像都将以相同的大小显示,该大小由ImageSize属性设置,较大的图像将所有至适当的尺寸。ImageList
控件
实际上就相当于
一个
图片...
net第三方
控件
列表
网页设计中针对中文排版CSS心得asp.net 2.0服务器
控件
开发之
控件
样式字号: 大大 中中 小小.net组件和
控件
DevExpress DotNetBar V4.7DevExpress DotNetBar V4.7 注册机DotNetBar是一套Visual Studio.Ne开发环境...
基于jQuery 常用WEB
控件
收集
Horizontal accordion: jQuery 基于jQuery开发,非常简单的水平方向折叠
控件
。 Horizontal accordion: jQuery jQuery-Horizontal Accordion 具有XBOX360 blade界面风格的水平方向Accordion。 jQuery-Horizontal...
.net组件及
控件
.net组件和
控件
DevExpress DotNetBar V4.7DevExpress DotNetBar V4.7 注册机DotNetBar是一套Visual Studio.Ne开发环境下的界面扩展框架组件,提供类似Office 2003和OfficeXP的菜单和工具条、OfficeX
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章