CTreeCtrl常见结构体

来源:互联网 发布:软件测评师考试内容 编辑:程序博客网 时间:2024/04/30 05:38
基本数据项结构
  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
原创粉丝点击