MFC 中的NMHDR、LPNMTREEVIEW、TVITEM

树控制的数据结构

在使用树控制时需要了解两个个非常重要的数据结构TV_ITEM和TV_INSERTSTRUCT,前一个数据结构是用来表示树控制的树项信息,后一个数据结构是用来定义将树项增加到数据控制中所需要的数据内容。另外,还需要NM_TREEVIEW、 TV_DISPINFO和TV_HITTESTINFO三个数据结构,这几个数据结构的定义方法如下:

①基本数据项结构

typedef struct _TV_ITEM {

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;

 

②插入树项结构

typedef struct _TV_INSER TSTRUCT {

HTREEITEM hParent; //父项控制句柄

HTREEITEM hInsertAfter; //插入树项的位置

TV_ITEM item; //数据项的结构

} TV_INSERTSTRUCT, FAR *LPTV_INSERTSTRUCT;

其中插入的位置如果是TVI_FIRST 或TVI_LAST ,则分别插入到树控制的最前面或最后面,如果是TVI_SORT ,则插入的树项自动插入到合适的位置。

 

③树控制通知消息结构

typedef struct _NM_TREEVIEW {

NMHDR hdr; //通知消息句柄

UINT action; //通知消息标志

TV_ITEM itemOld; //原来的数据结构

TV_ITEM itemNew; //新的数据结构

POINT ptDrag; //拖动指针

} NM_TREEVIEW;

 

④取得或设置数据结构

typedef struct _TV_DISPINFO { tvdi

NMHDR hdr; //通知消息控制句柄

TV_ITEM item; //数据项结构

} TV_DISPINFO;

 

⑤指针测试数据结构

typedef struct _TVHITTESTINFO { tvhtst

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 在客户区域的右侧


NMHDR为一个结构体。其形式如下:

typedef struct tagNMHDR {
    HWND hwndFrom;
    UINT idFrom;
    UINT code;
} NMHDR;

hwndFrom为正在发送消息的控件的句柄。

idFrom为正在发送消息的控件的ID。

code为消息通知码。

#define NM_TREEVIEW             NMTREEVIEW

NMTREEVIEW也为一结构体。其形式如下:

typedef struct tagNMTREEVIEW {
NMHDR hdr; 
UINT action; 
TVITEM itemOld; 
TVITEM itemNew; 
POINT ptDrag; 
} NMTREEVIEW, FAR *LPNMTREEVIEW; 
hdr 包含有关通知消息的NMHDR变量。
action 通知消息方式标志。
itemOld 包含旧节点状态的TVITEM结构
itemNew 包含新节点状态的TVITEM结构,在我看来是使用过与被使用过,oldpen,newpen与其同理。
ptDrag 事件发生时客户区鼠标坐标
 
这里不有一个结构体TVITEM,形式如下:
typedef struct tagTVITEM{
UINT mask;
HTREEITEM hItem;
UINT state;
UINT stateMask;
LPTSTR pszText;
int cchTextMax;
int iImage;
int iSelectedImage;
int cChildren;
LPARAM lParam;
} TVITEM, FAR *LPTVITEM;
这里包含的都是节点的一些属性

全文转自:http://blog.sina.com.cn/s/blog_48e42dc90100kdte.html

你可能感兴趣的:(MFC)