2个回答
展开全部
mfc CTreeCtrl禁用:
void CLeftView::OnItemExpanding(NMHDR* pNMHDR, LRESULT* pResult)
CTreeCtrl所表示的树控件是一个窗口,该窗口显示了分层的项列表。每一项都由标签和可选的为图化图像所组成,并且可以有与之关联的子项列表。
当需要纯子窗口控件时,使用CTreeCtrl.若希望树控件不仅作为控件还作为视图存在,则使用CTreeView,CTreeView类拥有框架窗口或拆分窗口的整个工作区,其大小随父窗口大小调整而自动调整,并可处理来自菜单,快捷键和工具栏的命令消息。
CTreeCtrl的典型使用模式:
1.创建控件。
若在对话框模板中指定了控件,或者正在使用CTreeView类,当创建对话框或者视图时,也自动创建控件。若要将控件创建为其他窗口的子窗口,则使用Create().
2.若控件要使用图像,调用SetImageList()函数设置图像列表。还可以调用SetIndent()来调整缩进。调整缩进最好在OnInitDialog()(对于对话框)或OnInitialUpadate()(对于视图)中进行。
3.通过为每个数据项调用一次CteeCtrl类的InsertItem()函数,向控件中填充数据。InsertItem()函数返回的是数据项的句柄,以后可以用该句柄引用数据项(如添加子项时)给数据项赋值最好也在OnInitalXXX时。
4.用户和控件交互过程中,控件将发送各种通知消息。通过在控件窗口的消息映射中添加ON_NOTIFY_REFLECT宏,或在父窗口的消息映射中添加ON_NOTIFY宏,可以指定一个函数来处理想要处理的每一条消息。
5.调用各种Set成员函数设置控件值。
6.调用各种Get成员函数检查控件内容。利用这些函数可以对树控件的内容遍历。
7.使用完后,销毁控件。
树控件的通信
1.若在使用CTreeView对象,使用函数CTreeView::GetTreeCtrl()获取对树控件的引用,可以利用如有工艺该值初始化另外一个引用,或将引用地址分配给CTreeCtrl指针。
2.如果树控件在对话框中,使用在对话框中创建的CTreeCtrl对象类型的成员变量。
3.如果树控件是一个子窗口,使用过去常用来狗仔对象的CTreeCtrl对象(或指针)
树控件的样式
创建树控件后,可以修改或者检索样式,方法是利用GetWindowLong()和SetWindowLong()函数为nIndex参数指定GWL_STYLE.
TVS_HASLINES样式通过在子项与其相应夫项间连线。
TVS_HASBUTTON在每一父项左侧有一BUTTON。
TVS_EDITABLE
TVS_NOTOOLTIPS
TVS_LINESATROOT
通过InsertItem()函数可以添加项,该函数返回HTREEITEM类型句柄。添加项时,必须指定新项的父项句柄。若在TVINSERTSTRUCT结构或hParent参数中,指定的是NULL活TVI_ROOT值,而不是父项句柄,则添加为根项。
void CLeftView::OnItemExpanding(NMHDR* pNMHDR, LRESULT* pResult)
CTreeCtrl所表示的树控件是一个窗口,该窗口显示了分层的项列表。每一项都由标签和可选的为图化图像所组成,并且可以有与之关联的子项列表。
当需要纯子窗口控件时,使用CTreeCtrl.若希望树控件不仅作为控件还作为视图存在,则使用CTreeView,CTreeView类拥有框架窗口或拆分窗口的整个工作区,其大小随父窗口大小调整而自动调整,并可处理来自菜单,快捷键和工具栏的命令消息。
CTreeCtrl的典型使用模式:
1.创建控件。
若在对话框模板中指定了控件,或者正在使用CTreeView类,当创建对话框或者视图时,也自动创建控件。若要将控件创建为其他窗口的子窗口,则使用Create().
2.若控件要使用图像,调用SetImageList()函数设置图像列表。还可以调用SetIndent()来调整缩进。调整缩进最好在OnInitDialog()(对于对话框)或OnInitialUpadate()(对于视图)中进行。
3.通过为每个数据项调用一次CteeCtrl类的InsertItem()函数,向控件中填充数据。InsertItem()函数返回的是数据项的句柄,以后可以用该句柄引用数据项(如添加子项时)给数据项赋值最好也在OnInitalXXX时。
4.用户和控件交互过程中,控件将发送各种通知消息。通过在控件窗口的消息映射中添加ON_NOTIFY_REFLECT宏,或在父窗口的消息映射中添加ON_NOTIFY宏,可以指定一个函数来处理想要处理的每一条消息。
5.调用各种Set成员函数设置控件值。
6.调用各种Get成员函数检查控件内容。利用这些函数可以对树控件的内容遍历。
7.使用完后,销毁控件。
树控件的通信
1.若在使用CTreeView对象,使用函数CTreeView::GetTreeCtrl()获取对树控件的引用,可以利用如有工艺该值初始化另外一个引用,或将引用地址分配给CTreeCtrl指针。
2.如果树控件在对话框中,使用在对话框中创建的CTreeCtrl对象类型的成员变量。
3.如果树控件是一个子窗口,使用过去常用来狗仔对象的CTreeCtrl对象(或指针)
树控件的样式
创建树控件后,可以修改或者检索样式,方法是利用GetWindowLong()和SetWindowLong()函数为nIndex参数指定GWL_STYLE.
TVS_HASLINES样式通过在子项与其相应夫项间连线。
TVS_HASBUTTON在每一父项左侧有一BUTTON。
TVS_EDITABLE
TVS_NOTOOLTIPS
TVS_LINESATROOT
通过InsertItem()函数可以添加项,该函数返回HTREEITEM类型句柄。添加项时,必须指定新项的父项句柄。若在TVINSERTSTRUCT结构或hParent参数中,指定的是NULL活TVI_ROOT值,而不是父项句柄,则添加为根项。
2015-06-09
展开全部
看你是否真正想要响应“单击”消息,一次单击事件是由一次按下和一次弹起组成的。
我推测你是希望截获鼠标“左键按下”(WM_LBUTTONDOWN)消息来控制控件行为。
另外,可以用CTreeCtrl::HitTest()来捕获节点,多看看MSDN,上面讲的很清楚。
NM_CLICK (tree view) Notification
--------------------------------------------------------------------------------
Notifies a tree-view control's parent window that the user has clicked the left mouse button within the control. This notification is sent in the form of a WM_NOTIFY message.
Syntax
NM_CLICK
lpnmh = (LPNMHDR) lParam;
Parameters
lpnmh
Pointer to an NMHDR structure that contains additional information about this notification message.
Return Value
Return nonzero to prevent the default processing, or zero to allow the default processing.
(返回非零值以定制处理过程,也就是把pResult置为非零值;注意,禁用拖拽的树和没有禁用拖拽的树在响应鼠标左键按下消息时的默认处理过程是不同的,由于启用拖拽时需要进行额外处理)
我推测你是希望截获鼠标“左键按下”(WM_LBUTTONDOWN)消息来控制控件行为。
另外,可以用CTreeCtrl::HitTest()来捕获节点,多看看MSDN,上面讲的很清楚。
NM_CLICK (tree view) Notification
--------------------------------------------------------------------------------
Notifies a tree-view control's parent window that the user has clicked the left mouse button within the control. This notification is sent in the form of a WM_NOTIFY message.
Syntax
NM_CLICK
lpnmh = (LPNMHDR) lParam;
Parameters
lpnmh
Pointer to an NMHDR structure that contains additional information about this notification message.
Return Value
Return nonzero to prevent the default processing, or zero to allow the default processing.
(返回非零值以定制处理过程,也就是把pResult置为非零值;注意,禁用拖拽的树和没有禁用拖拽的树在响应鼠标左键按下消息时的默认处理过程是不同的,由于启用拖拽时需要进行额外处理)
追问
其实我就是想让CTreeCtrl禁止一切操作 变为只读的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询