⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htlvtree.h

📁 枚举主机网络设备
💻 H
字号:
#if !defined(AFX_HTLVTREE_H__8DDFA4B5_64EE_41EE_AD0B_B6DF2D256365__INCLUDED_)
#define AFX_HTLVTREE_H__8DDFA4B5_64EE_41EE_AD0B_B6DF2D256365__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// htlvtree.h : header file
//
#include "HPublic.h"

#define		UM_CLK_TREE_ITEM	WM_USER+100
/////////////////////////////////////////////////////////////////////////////
// CHTLVTree window
class AFX_EXT_CLASS CHTLVItem{
public:
	CHTLVItem(){};
	//复制已存在对象,生成新对象
	CHTLVItem(CHTLVItem &other){
		*this=other;
	}
	//由父亲节点生成子节点
	CHTLVItem(CHTLVItem *parent){
		strIndex="";
		nLen=0;
		bufVal=NULL;

		type=parent->bufVal[0];
		if((parent->bufVal[1]&0x80)==0){
			nLen=parent->bufVal[1];
			bufVal=parent->bufVal+2;
			nOffset=2;
		}else{
			int nLenLen=parent->bufVal[1]&0x7f;
			BYTE *pLen=(BYTE*)&nLen;
			for(int i=0;i<nLenLen;i++)
				memcpy(pLen+i,parent->bufVal+2+nLenLen-1-i,1);
			bufVal=parent->bufVal+2+nLenLen;
			nOffset=2+nLenLen;
		}
	}
	virtual ~CHTLVItem(){};
	BOOL Create(BYTE *buf,int nLenBuf){
		strIndex="";
		nLen=0;
		bufVal=NULL;
		type=buf[0];
		if((buf[1]&0x80)==0){
			nLen=buf[1];
			bufVal=buf+2;
			nOffset=2;
			if((nLen+2)>nLenBuf)return FALSE;//子节点数据块越限,此节点为假节点。这种情况是可能
		}else{
			int nLenLen=buf[1]&0x7f;
			if((nLenLen>(nLenBuf-1)) || (nLenLen>4)){
				return FALSE;//四个字节的长度值最大可达2^32=4G,足够用了,超过四个字节,定是出错了
			}
			BYTE *pLen=(BYTE*)&nLen;
			for(int i=0;i<nLenLen;i++)
				memcpy(pLen+i,buf+2+nLenLen-1-i,1);
			bufVal=buf+2+nLenLen;
			nOffset=2+nLenLen;
			if((nLen+2+nLenLen)>nLenBuf)return FALSE;//子节点数据块越限,此节点为假节点。这种情况是可能
		}
		return TRUE;
	}
	CHTLVItem& operator=(CHTLVItem& other){
		strIndex=other.strIndex;
		type=other.type;
		nLen=other.nLen;
		bufVal=other.bufVal;
		nOffset=other.nOffset;
		return *this;
	}
public:
	CString strIndex;	//此字符串的个位表示此节点是其父亲的第几个孩子,
						//十位表示其父亲是其爷爷的第几个孩子...
						//每一位的值为:0-15(0-0xf)。
						//因此,在此种定义下每个节点的孩子不能超过16个,否则出错
	int nLen;
	int nOffset;
	BYTE type;
	BYTE* bufVal;
};

class AFX_EXT_CLASS CHTLVTree : public CTreeCtrl,public CHPublic
{
// Construction
public:
	CHTLVTree();

// Attributes
public:
	HTREEITEM GetChildItemByText(HTREEITEM hParent,CString strText);
	HTREEITEM GetChildItemByIndex(HTREEITEM hParent,int nIndex);

protected:
	CImageList			m_imaLarge;
	CImageList			m_imaSmall;
	BYTE				*m_bufTLV;
	int					m_nLenTLV;

// Operations
public:
	void SetTLV(BYTE *bufTLV,int nLenTLV);
	void GenerateChildren(HTREEITEM hParent);
	void GenerateTree();

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CHTLVTree)
	public:
	//}}AFX_VIRTUAL

// Implementation
public:
	void EnableImg();
	static CString FormatVal(CHTLVItem &hlv);
	static CString FormatText(CHTLVItem &hlv);
	void WhenTreeItemSelected(HTREEITEM hItem);
	void SetSmallImg();
	void SetLargeImg();
	virtual ~CHTLVTree();

	// Generated message map functions
protected:
	//{{AFX_MSG(CHTLVTree)
	afx_msg void OnClick(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg void OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult);
	//}}AFX_MSG

	DECLARE_MESSAGE_MAP()
private:
	int GetImg(int nType);
	static CString DescribeType(int nType);
	void ChangeItemText(HTREEITEM hParent);
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_HTLVTREE_H__8DDFA4B5_64EE_41EE_AD0B_B6DF2D256365__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -