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

📄 hnettree.h

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

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


#define		UM_CLK_TREE_ITEM	WM_USER+9001
#define		UM_ENUM_NET			WM_USER+9002

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;
};

/////////////////////////////////////////////////////////////////////////////
// CHNetTree window
#define		ITEM_DATA_ROOT			0
#define		ITEM_DATA_CARD			1
#define		ITEM_DATA_DOMAIN		2
#define		ITEM_DATA_ATV_HOST		3


class AFX_EXT_CLASS CTreeItemSelChangedParm
{
public:
	CTreeItemSelChangedParm(){
		m_nID=-1;
		m_strPath="";
		m_bFromTree=TRUE;
		m_hItem=NULL;
	};
	CTreeItemSelChangedParm(CTreeItemSelChangedParm& other){
		(*this)=other;
	};
	CTreeItemSelChangedParm(HTREEITEM hItem,UINT nID,CString strPath,BOOL bFromTree=TRUE){
		m_nID=nID;
		m_strPath=strPath;
		m_bFromTree=bFromTree;
		m_hItem=hItem;
	}
	~CTreeItemSelChangedParm(){};
	CTreeItemSelChangedParm& operator=(CTreeItemSelChangedParm& other){
		m_nID=other.m_nID;
		m_strPath=other.m_strPath;
		m_bFromTree=other.m_bFromTree;
		m_hItem=other.m_hItem;
		return other;
	}
	UINT	m_nID;
	BOOL	m_bFromTree;
	HTREEITEM m_hItem;
	CString m_strPath;
};


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

// Attributes
public:

// Operations
public:
	HTREEITEM GetChildItemByText(HTREEITEM hParent,CString strText);
	void DeleteChildrenItem(HTREEITEM hItem);
	CString GetPath(HTREEITEM hItem);
	void WhenTreeItemSelected(HTREEITEM hItem);

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CHNetTree)
	//}}AFX_VIRTUAL

// Implementation
public:
	virtual ~CHNetTree();

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

	DECLARE_MESSAGE_MAP()
};

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

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

#endif // !defined(AFX_HNETTREE_H__D3432B01_C855_4C5C_A2C4_65B204C1D45B__INCLUDED_)

⌨️ 快捷键说明

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