实战经验:CTreeCtrl.GetItemPartRect的用法

实战经验:CTreeCtrl.GetItemPartRect的用法

作者:BlogUpdater |  时间:2018-09-09 |  浏览:2465 |  评论已关闭 条评论

在一次CTreeCtrl的使用过程中,我需要自行绘制树控件结点前面的加减号按钮。主要碰到的难题是如何在合适的位置进行绘制。
一直在网络上寻找各种答案,直到碰到了GetItemPartRect这个API。真的有一种众里寻他千百度的感觉。
今天就来讲一讲这个API的用法。首先摘抄MSDN的部分:
GetItemPartRect:
Retrieves the bounding rectangle for a specified part of a specified item in the current tree-view control.

API描述:
GetItemPartRect是CTreeCtrl的一个方法,主要用于获取指定结点的一个特殊部分的区域,这里的特殊部分,可以是结点前面的加减号,也可以是结点图标,还可以是结点文字。但是当前版本只支持获取树结点前面的加减号按钮的区域。

再来看看参数列表:
BOOL GetItemPartRect(HTREEITEM hItem, int nPart, LPRECT lpRect)const;

第一个参数:
要获取的树结点句柄。

第二个参数:
指明获取的是树结点的哪个部分的区域,只能设置为:TVGIPR_BUTTON。

第三个参数:
一个指向RECT结构体的指针,当API成功执行后,会在此指针指向的结构体中填入指定部分的区域。

示例代码:

CRect rcItem;
m_treeCtrl.GetItemPartRect(hItem, TVGIPR_BUTTON, &rcItem);
m_treeCtrl.GetDC()->Draw3dRect(&rcItem, RGB(255, 0, 0), RGB(0, 0, 255));

总结
虽然GetItemPartRect目前只能得到加减号按钮的区域,但是对于树控件的自绘来说,还是很有用的。

标签:

评论已关闭。