基本数据项结构
UINT mask; //结构成员有效性屏蔽位
HTREEITEM hItem; //数据项控制句柄
UINT state; //数据项状态
UINT stateMask; //状态有效性屏蔽位
LPSTR pszText; //数据项名称字符串
int cchTextMax; //数据项名称的最大长度
int iImage; //数据项图标索引号
int iSelectedImage; //选中数据项图标索引号
int cChildren; //子项标识
LPARAM lParam; //程序定义的32位数据
} TV_ITEM, FAR *LPTV_ITEM;
TVIF_CHILDREN cChildren成员是有效的。
TVIF_DI_SETITEM 树形视控件将保留支持信息并且不重新请求它。当处理TVN_GETDISPINF通知时,这个标记是有效的。
TVIF_HANDLE hItem成员有效。
TVIF_IMAGE iImage成员有效。
TVIF_PARAM lParam成员有效。
TVIF_SELECTEDIMAGE iSelectedImage成员有效。
TVIF_STATE state和stateMask成员有效。
TVIF_TEXT pszText和cchTextMax成员有效。
hItem 这个函数引用的项句柄。
state 位标记和图像列表索引的设置,指出项的状态。当设置一个项的状态,stateMask成员指出这个成员的有效位。当检索一个项的状态,这个成员返回stateMask成员指出的位的当前状态。 这个成员的0至7位包含了项的状态标记。关于可能的项状态标记,参见Tree-View Control Item States.覆盖图像会叠加在项的图标图像。这个成员的8至11位指定了以1为基准的覆盖图像索引。如果这些位是0,这个项没有覆盖图像。要隔离这些位,请使用 TVIS_OVERLAYMASK 掩码。若要在此成员中设置覆盖图像索引,请使用 INDEXTOOVERLAYMASK 宏。用 ImageList_SetOverlayImage 函数设置图像列表覆盖图像。状态图像显示项目的图标来表示应用程序定义的状态。通过发送TVM_SETIMAGELIST消息来指定一个状态图像列表。要设置一个项的状态图像,在TVITEM结构的stateMask成员中包含TVIS_STATEIMAGEMASK值。结构的state成员的12至15位指定状态图像列表中被绘制图像的索引。要设置状态图像索引,使用INDEXTOSTATEIMAGEMASK。这个宏把一个索引适当的设置到12至15位上。要指出项没有状态图像,设置索引为0。这意味着在状态图像列表中的图像0不能被作为一个状态图像使用。要隔离state成员的位12至15,使用TVIS_STATEIMAGEMASK掩码。
stateMask state成员的有效的位。如果你要检索一个项的state,设置stateMask成员的位来指示state成员的位被返回。如果你正在设置一个项的状态,设置stateMask成员的位来指出state成员的位是你想设置的。要设置或检索一个项的覆盖图像的索引,请设置TVIS_OVERLAYMASK位。要设置和检索一个项的状态图像索引,请设置TVIS_STATEIMAGEMASK位。
pszText 如果这个结构指定了项属性,那么这个成员是指向一个以空字符结束的字符串,包含有项的文本。如果这个成员是值LPSTR_TEXTCALLBACK,那么父窗口负责保存名称,在这种情况下,当树形视控件需要显示、保存或编辑项文本时,向父窗口发送TVN_GETDISPINFO通知消息,当项文本改变时,发送TVN_SETDISPINFO通知消息。
如果结构是接收项的属性,这个成员是取回项文本缓冲的地址。请注意虽然树视图控件允许任何长度的字符串存储为项文本,显示只有首先 260 个字符。
cchTextMax pszText成员指定缓冲的大小,以字符为单位。如果这个结构被使用来设置项属性,这个成员被忽略。
iImage 当项是非选择状态中时,在树视图控件的图像列表中要使用的图标图像的索引。如果这个成员是值I_IMAGECALLBACK,父窗口为保存索引负责。在这种情况下,当树形视控件需要显示这个图像时,向父窗口发送TVN_GETDISPINFO通知消息来获得索引。
iSelectedImage 当项是被选择状态时,在树视图控件的图像列表中要使用的图标图像的索引。如果这个成员是值I_IMAGECALLBACK,父窗口为保存索引负责。在这种情况下,当树形视控件需要显示这个图像时,向父窗口发送TVN_GETDISPINFO通知消息来获得索引。
cChildren 标记,指出该项是否有关联的子项目。这个成员可以是下列值之一。
zero 这个项没有子项。
one 这个项有一个或更多的子项。
I_CHILDRENCALLBACK 父窗口跟踪该项目是否有子项。在这种情况下,当树视图控件需要显示项目时,控制会向父发送TVN_GETDISPINFO的通知代码,以确定该项目是否有子项。如果树视图控件具有的 TVS_HASBUTTONS 样式,它使用此成员来确定是否显示指示存在子项目的按钮。您可以使用此成员强制控件以显示按钮,即使该项目并没有插入任何子项目。这允许您同时尽量控制的内存使用量减少通过插入子项目,该项目是可见的或扩大时,才显示按钮。
I_CHILDRENAUTO 6.0 版供内部使用 ;不建议在应用程序中使用。树视图控件自动确定该项目是否具有子项目。请注意在 Comctl32.dll 的未来版本中可能不支持此标志。此外,commctrl.h 中未定义此标志。将下面的定义添加到应用程序以使用该标志的源文件:#define I_CHILDRENAUTO (-2)
lParam 与这项相关联的32位值。
插入树项结构
typedef struct _TV_INSER TSTRUCT {
HTREEITEM hParent; //父项控制句柄
HTREEITEM hInsertAfter; //插入树项的位置
TV_ITEM item; //数据项的结构
} TV_INSERTSTRUCT, FAR *LPTV_INSERTSTRUCT;
其中插入的位置如果是TVI_FIRST 或TVI_LAST ,则分别插入到树控制的最前面或最后面,如果是TVI_SORT ,则插入的树项自动插入到合适的位置。
NMHDR为一个结构体。其形式如下:
typedef struct tagNMHDR {
HWND hwndFrom;
UINT idFrom;
UINT code;
} NMHDR;
hwndFrom为正在发送消息的控件的句柄。
idFrom为正在发送消息的控件的ID。
code为消息通知码。
树控制通知消息结构
typedef struct _NM_TREEVIEW {
NMHDR hdr; //通知消息句柄
UINT action; //通知消息标志
TV_ITEM itemOld; //原来的数据结构
TV_ITEM itemNew; //新的数据结构
POINT ptDrag; //拖动指针
} NM_TREEVIEW;
hdr NMHDR 结构,其中包含有关此通知消息的信息。
action 通知具体行动标志。该成员使用以下通知代码。
TVN_ITEMEXPANDING
TVN_ITEMEXPANDED
TVN_SELCHANGING
TVN_SELCHANGED
对于action可能的标记值, see TVM_EXPAND and TVN_SELCHANGED.
itemOld TVITEM 结构,其中包含有关老项目状态的信息。通知消息没有使用它时,这个成员为0。。
itemNew TVITEM 结构,其中包含有关新项目状态的信息。通知消息没有使用它时,这个成员为0。。
ptDrag point结构,包含了在事件发生导致通知消息被发送时客户端的鼠标坐标。
取得或设置数据结构
typedef struct _TV_DISPINFO {
NMHDR hdr; //通知消息控制句柄
TV_ITEM item; //数据项结构
} TV_DISPINFO;
指针测试数据结构
typedef struct _TVHITTESTINFO {
POINT pt; //客户区域屏幕坐标指针
UINT flags; //存放测试结果的变量
HTREEITEM hItem; //测试的数据项结构
} TV_HITTESTINFO, FAR *LPTV_HITTESTINFO;
其中flags测试结果可以是如下值:
TVHT_ABOVE 在客户区域上面
TVHT_BELOW 在客户区域下面
TVHT_NOWHERE 在客户区域中并在最后一项下面
TVHT_ONITEM 在与树项关联的位图或标签内
TVHT_ONITEMBUTTON 在与树项关联的按钮上
TVHT_ONITEMICON 在与树项关联的位图上
TVHT_ONITEMINDENT 在与树项关联的联线上
TVHT_ONITEMLABEL 在与树项关联的标签上
TVHT_ONITEMRIGHT 在树项的右侧区域中
TVHT_ONITEMSTATEICON 在用户定义的状态图标上
TVHT_TOLEFT 在客户区域的左侧
TVHT_TORIGHT 在客户区域的右侧
更多信息参考MSDN:
http://msdn.microsoft.com/zh-cn/library/8bkz91b4.aspx
http://msdn.microsoft.com/zh-cn/library/bb759988.aspx
UINT mask; //结构成员有效性屏蔽位
HTREEITEM hItem; //数据项控制句柄
UINT state; //数据项状态
UINT stateMask; //状态有效性屏蔽位
LPSTR pszText; //数据项名称字符串
int cchTextMax; //数据项名称的最大长度
int iImage; //数据项图标索引号
int iSelectedImage; //选中数据项图标索引号
int cChildren; //子项标识
LPARAM lParam; //程序定义的32位数据
} TV_ITEM, FAR *LPTV_ITEM;
TVIF_CHILDREN cChildren成员是有效的。
TVIF_DI_SETITEM 树形视控件将保留支持信息并且不重新请求它。当处理TVN_GETDISPINF通知时,这个标记是有效的。
TVIF_HANDLE hItem成员有效。
TVIF_IMAGE iImage成员有效。
TVIF_PARAM lParam成员有效。
TVIF_SELECTEDIMAGE iSelectedImage成员有效。
TVIF_STATE state和stateMask成员有效。
TVIF_TEXT pszText和cchTextMax成员有效。
hItem 这个函数引用的项句柄。
state 位标记和图像列表索引的设置,指出项的状态。当设置一个项的状态,stateMask成员指出这个成员的有效位。当检索一个项的状态,这个成员返回stateMask成员指出的位的当前状态。 这个成员的0至7位包含了项的状态标记。关于可能的项状态标记,参见Tree-View Control Item States.覆盖图像会叠加在项的图标图像。这个成员的8至11位指定了以1为基准的覆盖图像索引。如果这些位是0,这个项没有覆盖图像。要隔离这些位,请使用 TVIS_OVERLAYMASK 掩码。若要在此成员中设置覆盖图像索引,请使用 INDEXTOOVERLAYMASK 宏。用 ImageList_SetOverlayImage 函数设置图像列表覆盖图像。状态图像显示项目的图标来表示应用程序定义的状态。通过发送TVM_SETIMAGELIST消息来指定一个状态图像列表。要设置一个项的状态图像,在TVITEM结构的stateMask成员中包含TVIS_STATEIMAGEMASK值。结构的state成员的12至15位指定状态图像列表中被绘制图像的索引。要设置状态图像索引,使用INDEXTOSTATEIMAGEMASK。这个宏把一个索引适当的设置到12至15位上。要指出项没有状态图像,设置索引为0。这意味着在状态图像列表中的图像0不能被作为一个状态图像使用。要隔离state成员的位12至15,使用TVIS_STATEIMAGEMASK掩码。
stateMask state成员的有效的位。如果你要检索一个项的state,设置stateMask成员的位来指示state成员的位被返回。如果你正在设置一个项的状态,设置stateMask成员的位来指出state成员的位是你想设置的。要设置或检索一个项的覆盖图像的索引,请设置TVIS_OVERLAYMASK位。要设置和检索一个项的状态图像索引,请设置TVIS_STATEIMAGEMASK位。
pszText 如果这个结构指定了项属性,那么这个成员是指向一个以空字符结束的字符串,包含有项的文本。如果这个成员是值LPSTR_TEXTCALLBACK,那么父窗口负责保存名称,在这种情况下,当树形视控件需要显示、保存或编辑项文本时,向父窗口发送TVN_GETDISPINFO通知消息,当项文本改变时,发送TVN_SETDISPINFO通知消息。
如果结构是接收项的属性,这个成员是取回项文本缓冲的地址。请注意虽然树视图控件允许任何长度的字符串存储为项文本,显示只有首先 260 个字符。
cchTextMax pszText成员指定缓冲的大小,以字符为单位。如果这个结构被使用来设置项属性,这个成员被忽略。
iImage 当项是非选择状态中时,在树视图控件的图像列表中要使用的图标图像的索引。如果这个成员是值I_IMAGECALLBACK,父窗口为保存索引负责。在这种情况下,当树形视控件需要显示这个图像时,向父窗口发送TVN_GETDISPINFO通知消息来获得索引。
iSelectedImage 当项是被选择状态时,在树视图控件的图像列表中要使用的图标图像的索引。如果这个成员是值I_IMAGECALLBACK,父窗口为保存索引负责。在这种情况下,当树形视控件需要显示这个图像时,向父窗口发送TVN_GETDISPINFO通知消息来获得索引。
cChildren 标记,指出该项是否有关联的子项目。这个成员可以是下列值之一。
zero 这个项没有子项。
one 这个项有一个或更多的子项。
I_CHILDRENCALLBACK 父窗口跟踪该项目是否有子项。在这种情况下,当树视图控件需要显示项目时,控制会向父发送TVN_GETDISPINFO的通知代码,以确定该项目是否有子项。如果树视图控件具有的 TVS_HASBUTTONS 样式,它使用此成员来确定是否显示指示存在子项目的按钮。您可以使用此成员强制控件以显示按钮,即使该项目并没有插入任何子项目。这允许您同时尽量控制的内存使用量减少通过插入子项目,该项目是可见的或扩大时,才显示按钮。
I_CHILDRENAUTO 6.0 版供内部使用 ;不建议在应用程序中使用。树视图控件自动确定该项目是否具有子项目。请注意在 Comctl32.dll 的未来版本中可能不支持此标志。此外,commctrl.h 中未定义此标志。将下面的定义添加到应用程序以使用该标志的源文件:#define I_CHILDRENAUTO (-2)
lParam 与这项相关联的32位值。
插入树项结构
typedef struct _TV_INSER TSTRUCT {
HTREEITEM hParent; //父项控制句柄
HTREEITEM hInsertAfter; //插入树项的位置
TV_ITEM item; //数据项的结构
} TV_INSERTSTRUCT, FAR *LPTV_INSERTSTRUCT;
其中插入的位置如果是TVI_FIRST 或TVI_LAST ,则分别插入到树控制的最前面或最后面,如果是TVI_SORT ,则插入的树项自动插入到合适的位置。
NMHDR为一个结构体。其形式如下:
typedef struct tagNMHDR {
HWND hwndFrom;
UINT idFrom;
UINT code;
} NMHDR;
hwndFrom为正在发送消息的控件的句柄。
idFrom为正在发送消息的控件的ID。
code为消息通知码。
树控制通知消息结构
typedef struct _NM_TREEVIEW {
NMHDR hdr; //通知消息句柄
UINT action; //通知消息标志
TV_ITEM itemOld; //原来的数据结构
TV_ITEM itemNew; //新的数据结构
POINT ptDrag; //拖动指针
} NM_TREEVIEW;
hdr NMHDR 结构,其中包含有关此通知消息的信息。
action 通知具体行动标志。该成员使用以下通知代码。
TVN_ITEMEXPANDING
TVN_ITEMEXPANDED
TVN_SELCHANGING
TVN_SELCHANGED
对于action可能的标记值, see TVM_EXPAND and TVN_SELCHANGED.
itemOld TVITEM 结构,其中包含有关老项目状态的信息。通知消息没有使用它时,这个成员为0。。
itemNew TVITEM 结构,其中包含有关新项目状态的信息。通知消息没有使用它时,这个成员为0。。
ptDrag point结构,包含了在事件发生导致通知消息被发送时客户端的鼠标坐标。
取得或设置数据结构
typedef struct _TV_DISPINFO {
NMHDR hdr; //通知消息控制句柄
TV_ITEM item; //数据项结构
} TV_DISPINFO;
指针测试数据结构
typedef struct _TVHITTESTINFO {
POINT pt; //客户区域屏幕坐标指针
UINT flags; //存放测试结果的变量
HTREEITEM hItem; //测试的数据项结构
} TV_HITTESTINFO, FAR *LPTV_HITTESTINFO;
其中flags测试结果可以是如下值:
TVHT_ABOVE 在客户区域上面
TVHT_BELOW 在客户区域下面
TVHT_NOWHERE 在客户区域中并在最后一项下面
TVHT_ONITEM 在与树项关联的位图或标签内
TVHT_ONITEMBUTTON 在与树项关联的按钮上
TVHT_ONITEMICON 在与树项关联的位图上
TVHT_ONITEMINDENT 在与树项关联的联线上
TVHT_ONITEMLABEL 在与树项关联的标签上
TVHT_ONITEMRIGHT 在树项的右侧区域中
TVHT_ONITEMSTATEICON 在用户定义的状态图标上
TVHT_TOLEFT 在客户区域的左侧
TVHT_TORIGHT 在客户区域的右侧
更多信息参考MSDN:
http://msdn.microsoft.com/zh-cn/library/8bkz91b4.aspx
http://msdn.microsoft.com/zh-cn/library/bb759988.aspx