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

📄 mibbrowserview.cpp

📁 SQL数据库和vc的ADO连接问题的详细源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// MibBrowserView.cpp : implementation of the CMibBrowserView class
//

#include "stdafx.h"
#include "MibBrowser.h"
#include "Dlg_input.h"//输入OID对话框;
#include "SetDig.h"//SET操作对话框;
#include "MibBrowserDoc.h"
#include "MibBrowserView.h"
#include "MainFrm.h"
#include "Users.h"        //////zzzz
#include "UserManDlg.h"   //////zzzz
#include "ChangePwdDlg.h"

extern CUsers curUser;    /////////////////////////zzzzzzzzzzzzzzzzz

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMibBrowserView

IMPLEMENT_DYNCREATE(CMibBrowserView, CFormView)

BEGIN_MESSAGE_MAP(CMibBrowserView, CFormView)
	//{{AFX_MSG_MAP(CMibBrowserView)
	ON_COMMAND(ID_GET, OnGet)
	ON_COMMAND(ID_GETNEXT, OnGetnext)
	ON_COMMAND(ID_GETSUBTREE, OnGetsubtree)
	ON_COMMAND(ID_WALK, OnWalk)
	ON_WM_DESTROY()
	ON_NOTIFY(TVN_ITEMEXPANDED, IDC_TREE1, OnItemexpandedTree1)
	ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, OnSelchangedTree1)
	ON_COMMAND(ID_LOAD, OnLoad)
	ON_COMMAND(ID_OID, OnOid)
	ON_COMMAND(ID_SAVE, OnSave)
	ON_COMMAND(ID_SET, OnSet)
	ON_COMMAND(IDR_USERMAN, OnUserman)
	ON_COMMAND(IDR_PWDMAN, OnPwdman)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMibBrowserView construction/destruction

CMibBrowserView::CMibBrowserView()
	: CFormView(CMibBrowserView::IDD)
{
	//{{AFX_DATA_INIT(CMibBrowserView)
	m_edit1 = _T("");
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CMibBrowserView::~CMibBrowserView()
{
}

void CMibBrowserView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMibBrowserView)
	DDX_Control(pDX, IDC_EDIT3, m_oid);
	DDX_Control(pDX, IDC_EDIT2, m_community);
	DDX_Control(pDX, IDC_IPADDRESS1, m_ipadd);
	DDX_Control(pDX, IDC_TREE1, m_tree);
	DDX_Control(pDX, IDC_LIST1, m_list);
	DDX_Text(pDX, IDC_EDIT1, m_edit1);
	//}}AFX_DATA_MAP
}

BOOL CMibBrowserView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFormView::PreCreateWindow(cs);
}
//查找给定OID的叶子节点的函数,返回节点句柄;
HTREEITEM CMibBrowserView::SearchNode(const CString &OidStr)
{
   MibNode *pData;
   HTREEITEM hTv;
   hTv=m_tree.GetRootItem();
    //追踪节点OID,直到叶子节点;
   while (hTv!=NULL)
   {
       pData=(MibNode*)m_tree.GetItemData(hTv);
	   if (pData!=NULL)
	   {   
		   //如果OID串不以该节点的OID串开始,移到它的兄弟节点;
           if (OidStr.Find((LPCTSTR)(pData->POid+'.'))!=0)
		     hTv=m_tree.GetNextItem(hTv,TVGN_NEXT);
		   else
           {
            //否则,如果不是叶子节点,移到它的第一个子节点;
		    if (m_tree.ItemHasChildren(hTv))
            hTv=m_tree.GetNextItem(hTv,TVGN_CHILD);
			//如果是叶子节点,返回节点句柄;
            else
             return hTv;
		   }
		}//if (pData!=NULL)	 
	}//while (hTv!=NULL)
   if (hTv==NULL) 
	   return NULL;
   else
 	   return hTv;
}
//处理数据类型为枚举型整数的函数,将其转化为字符串列表中的元素,
//以下面的形式保存:
//1
//up
//2
//down
//3
//testing
void CMibBrowserView::WorkOnInt(CString &str,CStringList* p)
{
   //截取大括号中的字符串,不包括大括号;
   int n1=str.Find('{');
   int n2=str.Find('}')-n1-1;
   str=str.Mid(n1+1,n2)+',';
   //AfxMessageBox((LPCTSTR)str);
   while (str.GetLength()>3)
   {
	   CString str1=str.Left(str.Find(','));
       str=str.Mid(str.Find(',')+1);
       int n3=str1.Find('(');
       int n4=str1.Find(')')-n3-1;
	   CString list=str1.Mid(n3+1,n4);
	   list.TrimLeft();
	   list.TrimRight();
    
	   p->AddTail(list);
       list=str1.Left(n3);
       list.TrimLeft();
	   list.TrimRight();
      p->AddTail(list);
	  
   }

}
//使用递归算法,遍历整个以hparent为根节点的子树,销毁Data中的对象;
void CMibBrowserView::travl(HTREEITEM hparent)
{
MibNode* pnode;	
//如果节点存在,首先判断data是否为NULL,如否,则进一步判断PInteger
//是否为NULL,如否,释放所指向的对象,然后释放data所指向的对象;

if (hparent!=NULL)
{
   	if ((pnode=(MibNode*)m_tree.GetItemData(hparent))!=NULL)
	   {
		if((pnode->PInteger)!=NULL)
			delete pnode->PInteger;
		delete pnode;
	}
}
hparent=m_tree.GetChildItem(hparent);
do
{
   if (hparent!=NULL)
   travl(hparent);
   hparent=m_tree.GetNextSiblingItem(hparent);
 } while(hparent!=NULL);
}
//根据给定的父,子节点名称在树中增加新节点的函数,并设置相应的图标;
void CMibBrowserView::AddObject(HTREEITEM ht,CString &Parent_name,
							 CString &Child_name,CString &num,MibNode *p)
{
	           CString OidStr;
               Parent_name.TrimLeft();
			   Parent_name.TrimRight();
			   Child_name.TrimLeft();
			   Child_name.TrimRight();
			   //查找父节点位置;
               HTREEITEM hParent=FindNode(ht,Parent_name);
               if (hParent!=NULL)
			   {
				   //增加新节点;
				     HCurrent=m_tree.InsertItem(LPCTSTR(Child_name),3,3,hParent);
                     //获取父节点OID;
					 MibNode* P_node=(MibNode*)m_tree.GetItemData(hParent);
					 OidStr=P_node->POid;
					 //生成子节点OID;
					 OidStr=OidStr+'.'+num;
					 p->POid=OidStr;
					 //设置子节点data属性;
					 m_tree.SetItemData(HCurrent,(DWORD)p);
					 //根据不同节点设置不同发图标;
					  if (IndexString.Find((LPCTSTR)Child_name)>0)
                      m_tree.SetItemImage(HCurrent,4,4);
                     if (Child_name.Find("Entry")>1)
                     m_tree.SetItemImage(HCurrent,5,5);
					  if (Child_name.Find("Table")>1)
                     m_tree.SetItemImage(HCurrent,6,6);
			   }

}									 

//增加辅助节点。增加前,首先要查找树中父节点是否已经存在,如存在父节点,
//生成节点对应的结构数据,将新节点增加为父节点的子节点。否则,说明新节
//点为顶端节点,首先从TopOid中查找对应的OID,生成节点对应的结构数据,并
//增加父节点。然后根据父节点的OID和参数&num生成子节点的OID,生成节点对
//应的结构数据,并增加子节点;
void CMibBrowserView::AddPlaceHolder(HTREEITEM ht,CString &Parent_name,
									 CString &Child_name,CString &num)
{
	CString OidStr;
	Parent_name.TrimLeft();
	Parent_name.TrimRight();
	Child_name.TrimLeft();
	Child_name.TrimRight();
	//查找父节点;
	HTREEITEM hParent=FindNode(ht,Parent_name);
	if (hParent==NULL)
	{
		//父节点不存在;
		AfxMessageBox("请确认是否注册了顶端节点!");
						  return;
	}
	else
	{
		//父节点存在,只增加子节点;
		HCurrent=m_tree.InsertItem(LPCTSTR(Child_name),1,1,hParent);
		MibNode* P_node=(MibNode*)m_tree.GetItemData(hParent);
		OidStr=P_node->POid;
		OidStr=OidStr+'.'+num;
		P_node=new MibNode;
		InitNodeData(P_node);
		P_node->POid=OidStr;
		m_tree.SetItemData(HCurrent,(DWORD)P_node);
	}
} 
//装载MIB文件;
bool CMibBrowserView::LoadMib(CString &filename)
{   
    MibNode* pNode;
	if (MibFile.Open((LPCTSTR)filename,CFile::modeRead)==false)
	{
		AfxMessageBox("打开MIB-II文件时失败");
        return false;
	}
	IndexString=' ';
	//逐行读入并处理;
	while (MibFile.ReadString(Line))
	{
		//预处理读入的行;
		//空行,直接读下一行;	
		if (Line.GetLength()==0) continue;
		//注释行,直接读下一行;
		if (Line.Find("--")==0) continue;
		//行的后面包含注释部分,去掉注释部分;
		if (Line.Find("--")>0)
			Line=Line.Left(Line.Find("--"));
		//除去行两端的空白字符;
		Line.TrimLeft();
		Line.TrimRight();
		//MIB模块名定义行;
		/* if (Line.Find("DEFINITIONS ::=")>0)
		{
        Line=Line.Left(Line.Find("DEFINITIONS ::="));
        HSecond= m_tree.InsertItem(LPCTSTR(Line) ,1,2,HRoot);
		continue;
	   };*/
		//辅助节点定义行;
		if (Line.Find("OBJECT IDENTIFIER ::=")>2)
			if ((Line.Find('{')>10)&&(Line.Find('}')>10))
			{
				CString ParentName,NodeName,Pos;
				NodeName=Line.Left(Line.Find("OBJECT IDENTIFIER ::="));
				int n1=Line.Find('{');
				int n2=Line.Find('}')-n1-1;
				Line=Line.Mid(n1+1,n2);
				Line.TrimLeft();
				Line.TrimRight();
				ParentName=Line.Left(Line.Find(' '));
				Pos=Line.Mid(Line.Find(' ')+1);
				AddPlaceHolder(HRoot,ParentName,NodeName,Pos);
				continue;
			}
			//辅助节点定义行;
			if ((Line.Find("MODULE-IDENTITY")>2)&&(Line.Find(',')==-1))
			{
				CString ParentName,NodeName,Pos;
				NodeName=Line.Left(Line.Find("MODULE-IDENTITY"));
               	while (MibFile.ReadString(Line))
				{
					if (Line.GetLength()==0) continue;
					if (Line.Find("--")==0) continue;
					if (Line.Find("--")>0)
						Line=Line.Left(Line.Find("--"));
					Line.TrimLeft();
					Line.TrimRight();
					if ((Line.Find("::=")==0)&&(Line.Find('}')>3)&&(Line.Find('{')>1))
					{
						int n1=Line.Find('{');
						int n2=Line.Find('}')-n1-1;
						Line=Line.Mid(n1+1,n2);
						Line.TrimLeft();
						Line.TrimRight();
						ParentName=Line.Left(Line.Find(' '));
						Pos=Line.Mid(Line.Find(' ')+1);
						AddPlaceHolder(HRoot,ParentName,NodeName,Pos);
						break;
					}
				}//	while (MibFile.ReadString(Line))
				continue;
			}
			//辅助节点定义行;
			if ((Line.Find("OBJECT-IDENTITY")>2)&&(Line.Find(',')==-1))
			{
				CString ParentName,NodeName,Pos;
				NodeName=Line.Left(Line.Find("OBJECT-IDENTITY"));
				int n1=Line.Find('{');
				int n2=Line.Find('}')-n1-1;
				Line=Line.Mid(n1+1,n2);
				Line.TrimLeft();
				Line.TrimRight();
				ParentName=Line.Left(Line.Find(' '));
				Pos=Line.Mid(Line.Find(' ')+1);
				AddPlaceHolder(HRoot,ParentName,NodeName,Pos);
				continue;
			}
			//被管理对象定义行;
			if ((Line.Find("OBJECT-TYPE")>2)&&(Line.Find(',')==-1))
			{   
				CString ParentName,NodeName,Pos;
				NodeName=Line.Left(Line.Find("OBJECT-TYPE"));
				NodeName.TrimLeft();
				NodeName.TrimRight();
				pNode=new MibNode;
				// pNode->PInteger=new CStringList();
				//  if (pNode->PInteger==NULL)  AfxMessageBox(" 1 Bad pointer!!");
				InitNodeData(pNode);
				//逐行读入后续的定义行;
				while (MibFile.ReadString(Line))
				{
					//读入行的预处理;
					if (Line.GetLength()==0) continue;
					if (Line.Find("--")==0) continue;
					if (Line.Find("--")>0)
						Line=Line.Left(Line.Find("--"));
					Line.TrimLeft();
					Line.TrimRight();
					if(Line.Find("SYNTAX")==0)
					{
						//整数类型;
						if (Line.Find("INTEGER")>0)
						{
							pNode->PSnytax="INTEGER";
							//一行中完成定义的枚举整数类型;
							if ((Line.Find('{')>10)&&(Line.Find('}')>10))
							{
								pNode->PInteger=new CStringList();
								WorkOnInt(Line,pNode->PInteger);
								
								
							}
							//枚举型整数定义的后两种形式;
							if ((Line.Find('{')>10)&&(Line.Find('}')==-1))
							{
								CString Line1='{';
								while (MibFile.ReadString(Line))
								{
									if (Line.GetLength()==0) continue;
									if (Line.Find("--")==0) continue;
									if (Line.Find("--")>0)
										Line=Line.Left(Line.Find("--"));
									Line.TrimLeft();
									Line.TrimRight();
									Line1+=Line;
									if (Line.Find('}')!=-1) break; 
								}
								pNode->PInteger=new CStringList();
								WorkOnInt(Line1,pNode->PInteger);
							}	   
						}
						else
							//非INTEGER的其他类型;
						{
							Line=Line.Mid(6);
							Line.TrimLeft();
							Line.TrimRight();
							pNode->PSnytax=Line;
						}
						continue;
					}// if(Line.Find("SYNTAX")==0)
					//枚举型整数的第一种定义形式;
					if ((Line.Find('{')==0)&&(pNode->PSnytax.Find("INTEGER")==0))
					{ 
						CString Line1=Line;
						while (MibFile.ReadString(Line))
						{
							if (Line.GetLength()==0) continue;
							if (Line.Find("--")==0) continue;
							if (Line.Find("--")>0)
								Line=Line.Left(Line.Find("--"));
							Line.TrimLeft();
							Line.TrimRight();
							Line1+=Line;
							if (Line.Find('}')!=-1) break; 
						}
						pNode->PInteger=new CStringList();
						WorkOnInt(Line1,pNode->PInteger);
						continue; 
					} 
					//定义访问权限的行;
					if ((Line.Find("ACCESS")==0)||(Line.Find("MAX-ACCESS")==0))
					{
						Line=Line.Mid(Line.Find(' '));
                     	Line.TrimLeft();
						Line.TrimRight();
						pNode->PAccess=Line;
						continue;
					}
					//定义对象状态的行;
					if ((Line.Find("STATUS")==0))
					{
						Line=Line.Mid(Line.Find(' '));
                    	Line.TrimLeft();
						Line.TrimRight();
						pNode->PStatus=Line;
						continue;
					}
					//定义表索引的行;
					if ((Line.Find("INDEX")==0))
					{
						Line=Line.Mid(Line.Find(' '));
						CString Line1=Line;
						if (Line.Find('}')==-1)
						{
							while (MibFile.ReadString(Line))
							{
								if (Line.GetLength()==0) continue;
								if (Line.Find("--")==0) continue;
								if (Line.Find("--")>0)

⌨️ 快捷键说明

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