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

📄 docmanage.cpp

📁 文档生成工具 XML例子
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				
				pXmlChildNode = pXmlNode->GetlastChild();
				
				char* pszData = new char[2048];
				memset(pszData, 0, sizeof(pszData));
				sprintf(pszData, "%s", W2A(pXmlChildNode->Gettext()));
				FormatData(pszData, 1);
				fputs(pszData, pDocFile);

				fputs("\n_________________________________________________________________________________________________________\n", pDocFile);
				pXmlNode = pXmlNodeList->nextNode();		
			}
		}
	}
	catch(_com_error& e)
	{
		MessageBox(0, W2A(e.Description()),0,0);
	}
		
	return true;
}

BOOL CDocManage::PutFunctionAllInfo(FILE *pDocFile, CString strClassName, CString strVisit)
{
	USES_CONVERSION;
 	HRESULT hr = NULL;
	CString strLine;
	char pszFilePath[160];
	memset(pszFilePath, 0, sizeof(pszFilePath));
	sprintf(pszFilePath,"%s\\%s%s", theApp.m_strLocPath, strClassName, FILEEXT);
	
	IXMLDOMDocumentPtr pXmlDoc;
	IXMLDOMNodePtr pXmlNode;
	IXMLDOMNodePtr pXmlChildNode;
	IXMLDOMNodeListPtr pXmlNodeList;
	IXMLDOMNodeListPtr pXmlChildNodeList;
	IXMLDOMNamedNodeMapPtr  pXmlNodeMap;

	try
	{	
		hr = pXmlDoc.CreateInstance(__uuidof(DOMDocument));
		if(FAILED(hr))
		{
			MessageBox(0,"error!",0,0);
		}
		else
		{
			pXmlDoc->load(_bstr_t(pszFilePath));
			pXmlNodeList = pXmlDoc->selectNodes(_bstr_t("Classes/class/Functions/function[@visit='" + strVisit + "']" ));
			pXmlNode = pXmlNodeList->nextNode();
			
			while(pXmlNode != NULL)
			{
				strLine.Format("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n%s:   %s\n",MEMBERTYPE, strVisit);	
				fputs(strLine, pDocFile);

				pXmlNodeMap = pXmlNode->Getattributes();
				pXmlChildNode = pXmlNodeMap->getNamedItem(_bstr_t("name"));
				strLine.Format("%s:     %s\n", FUNCTIONNAME, W2A(pXmlChildNode->Gettext()));
				fputs(strLine, pDocFile);
				
				pXmlChildNodeList = pXmlNode->GetchildNodes();
				pXmlChildNode = pXmlChildNodeList->nextNode();
 				strLine.Format("%s:   %s\n", FUNCTIONDECLARE, W2A(pXmlChildNode->Gettext()));
				fputs(strLine, pDocFile);
				
				pXmlChildNode = pXmlChildNodeList->nextNode();
				strLine.Format("%s:\n", RETURNDESC);
				fputs(strLine, pDocFile);
				char* pszData = new char[2048];
				memset(pszData, 0, sizeof(pszData));
				sprintf(pszData, "%s", W2A(pXmlChildNode->Gettext()));
				FormatData(pszData, 1);
				fputs(pszData, pDocFile);


				pXmlChildNode = pXmlChildNodeList->nextNode();
				strLine.Format("\n%s:\n", PARAMDESC);
				fputs(strLine, pDocFile);
				memset(pszData, 0, sizeof(pszData));
				sprintf(pszData, "%s", W2A(pXmlChildNode->Gettext()));
				FormatData(pszData, 1);
				fputs(pszData, pDocFile);

				pXmlChildNode = pXmlChildNodeList->nextNode();
				strLine.Format("\n%s:\n", EXAMPLE);
				fputs(strLine, pDocFile);
				memset(pszData, 0, sizeof(pszData));
				sprintf(pszData, "%s", W2A(pXmlChildNode->Gettext()));
				FormatData(pszData, 1);
				fputs(pszData, pDocFile);
				
				pXmlChildNode = pXmlChildNodeList->nextNode();
				strLine.Format("\n%s:\n", REMARKS);
				fputs(strLine, pDocFile);
				memset(pszData, 0, sizeof(pszData));
				sprintf(pszData, "%s", W2A(pXmlChildNode->Gettext()));
				FormatData(pszData, 1);
				fputs(pszData, pDocFile);

				pXmlNode = pXmlNodeList->nextNode();		
			}
		}
	}
	catch(_com_error& e)
	{
		MessageBox(0, W2A(e.Description()),0,0);
	}
	
	return true;
}

BOOL CDocManage::PutPropertyAllInfo(FILE *pDocFile, CString strClassName, CString strVisit)
{
	USES_CONVERSION;
 	HRESULT hr = NULL;
	CString strLine;
	char pszFilePath[160];
	memset(pszFilePath, 0, sizeof(pszFilePath));
	sprintf(pszFilePath,"%s\\%s%s", theApp.m_strLocPath, strClassName, FILEEXT);
	
	IXMLDOMDocumentPtr pXmlDoc;
	IXMLDOMNodePtr pXmlNode;
	IXMLDOMNodePtr pXmlChildNode;
	IXMLDOMNodeListPtr pXmlNodeList;
	IXMLDOMNodeListPtr pXmlChildNodeList;
	IXMLDOMNamedNodeMapPtr  pXmlNodeMap;

	try
	{	
		hr = pXmlDoc.CreateInstance(__uuidof(DOMDocument));
		if(FAILED(hr))
		{
			MessageBox(0,"error!",0,0);
		}
		else
		{
			pXmlDoc->load(_bstr_t(pszFilePath));
			pXmlNodeList = pXmlDoc->selectNodes(_bstr_t("Classes/class/Propertys/property[@visit='" + strVisit + "']" ));
			pXmlNode = pXmlNodeList->nextNode();
			
			while(pXmlNode != NULL)
			{
				strLine.Format("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n%s:   %s\n",MEMBERTYPE, strVisit);	
				fputs(strLine, pDocFile);

				pXmlNodeMap = pXmlNode->Getattributes();
				pXmlChildNode = pXmlNodeMap->getNamedItem(_bstr_t("name"));
				strLine.Format("%s:     %s\n", PROPERTYNAME, W2A(pXmlChildNode->Gettext()));
				fputs(strLine, pDocFile);
				
				pXmlChildNodeList = pXmlNode->GetchildNodes();
				pXmlChildNode = pXmlChildNodeList->nextNode();
 				strLine.Format("%s:   %s\n", PROPERTYDECLARE, W2A(pXmlChildNode->Gettext()));
				fputs(strLine, pDocFile);
				
				pXmlChildNode = pXmlChildNodeList->nextNode();
				strLine.Format("%s:\n", PROPERTYTYPE);
				fputs(strLine, pDocFile);
				char* pszData = new char[2048];
				memset(pszData, 0, sizeof(pszData));
				sprintf(pszData, "%s", W2A(pXmlChildNode->Gettext()));
				FormatData(pszData, 1);
				fputs(pszData, pDocFile);

				pXmlChildNode = pXmlChildNodeList->nextNode();
				strLine.Format("\n%s:\n", EXAMPLE);
				fputs(strLine, pDocFile);
				memset(pszData, 0, sizeof(pszData));
				sprintf(pszData, "%s", W2A(pXmlChildNode->Gettext()));
				FormatData(pszData, 1);
				fputs(pszData, pDocFile);
				
				pXmlChildNode = pXmlChildNodeList->nextNode();
				strLine.Format("\n%s:\n", REMARKS);
				fputs(strLine, pDocFile);
				memset(pszData, 0, sizeof(pszData));
				sprintf(pszData, "%s", W2A(pXmlChildNode->Gettext()));
				FormatData(pszData, 1);
				fputs(pszData, pDocFile);

				pXmlNode = pXmlNodeList->nextNode();		
			}
		}
	}
	catch(_com_error& e)
	{
		MessageBox(0, W2A(e.Description()),0,0);
	}
	
	return true;
}

BOOL CDocManage::PutPropertyInfo(FILE *pDocFile, CString strClassName, CString strVisit)
{
	USES_CONVERSION;
 	HRESULT hr = NULL;
	CString strLine;
	char pszFilePath[160];
	memset(pszFilePath, 0, sizeof(pszFilePath));
	sprintf(pszFilePath,"%s\\%s%s", theApp.m_strLocPath, strClassName, FILEEXT);
	strLine.Format("%s: \n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n", strVisit);	
	fputs(strLine, pDocFile);
	
	IXMLDOMDocumentPtr pXmlDoc;
	IXMLDOMNodePtr pXmlNode;
	IXMLDOMNodePtr pXmlChildNode;
	IXMLDOMNodeListPtr pXmlNodeList;
	IXMLDOMNamedNodeMapPtr  pXmlNodeMap;

	try
	{	
		hr = pXmlDoc.CreateInstance(__uuidof(DOMDocument));
		if(FAILED(hr))
		{
			MessageBox(0,"error!",0,0);
		}
		else
		{
			pXmlDoc->load(_bstr_t(pszFilePath));
			pXmlNodeList = pXmlDoc->selectNodes(_bstr_t("Classes/class/Propertys/property[@visit='" + strVisit + "']" ));
			pXmlNode = pXmlNodeList->nextNode();
			
			while(pXmlNode != NULL)
			{
				pXmlNodeMap = pXmlNode->Getattributes();
				pXmlChildNode = pXmlNodeMap->getNamedItem(_bstr_t("name"));
				strLine.Format("%s\n", W2A(pXmlChildNode->Gettext()));
				fputs(strLine, pDocFile);
				
				pXmlChildNode = pXmlNode->GetlastChild();
				strLine.Format("%s", W2A(pXmlChildNode->Gettext()));
				char* pszData = new char[2048];
				memset(pszData, 0, sizeof(pszData));
				sprintf(pszData, "%s", strLine);
				FormatData(pszData, 1);
				fputs(pszData, pDocFile);

				fputs("\n_________________________________________________________________________________________________________\n", pDocFile);
				pXmlNode = pXmlNodeList->nextNode();		
			}
		}
	}
	catch(_com_error& e)
	{
		MessageBox(0, W2A(e.Description()),0,0);
	}
	
	return true;
}

void CDocManage::FormatData(char *pszData, int num)
{
	char pszTmpData[1600];
	char *pData = NULL;
	char*pTmpData = NULL;
	memset(pszTmpData, 0, sizeof(pszTmpData));
	strcpy(pszTmpData, pszData);
	pData = pszData;
	pTmpData = pszTmpData;
	for(int i=0;i<num;i++)
	{
		*pData = '\t';
		pData++;
	}

	while(*pTmpData != '\0')
	{
		if(*pTmpData == '\r')
		{
			pTmpData++;
			continue;
		}

		if(*pTmpData != '\n')
		{
			*pData = *pTmpData;
			pData++;
			pTmpData++;
		}
		else
		{
			*pData = *pTmpData;
			pData++;
			for(int j=0;j<num;j++)
			{
				*pData = '\t';
				pData++;
			}
			pTmpData++;
		}
	}
	*pData= '\0';
}


CString CDocManage::CreateTemplate()
{
	return "<?xml version=\"1.0\"?><Classes><class><name></name><declare></declare><classdesc></classdesc><Functions></Functions><Propertys></Propertys></class></Classes>"; 
}


BOOL CDocManage::DeleteClass(CString strClassName)
{
	char pszFilePath[160];
	memset(pszFilePath, 0, sizeof(pszFilePath));
	sprintf(pszFilePath,"%s\\%s%s", theApp.m_strLocPath, strClassName, FILEEXT);
	return	DeleteFile(pszFilePath);
}

BOOL CDocManage::DeleteFunction(CString strClassName, int ID)
{
	USES_CONVERSION;
 	HRESULT hr = NULL;
	BOOL breturn = true;
	char pszFilePath[160];
	memset(pszFilePath, 0, sizeof(pszFilePath));
	sprintf(pszFilePath,"%s\\%s%s", theApp.m_strLocPath, strClassName, FILEEXT);
	CString strID;
	strID.Format("%d", ID);
	
	IXMLDOMDocumentPtr pXmlDoc;
	IXMLDOMNodePtr pXmlNode;
	IXMLDOMNodePtr pXmlParentNode;
	IXMLDOMNodeListPtr pXmlNodeList;
	
	try
	{	
		hr = pXmlDoc.CreateInstance(__uuidof(DOMDocument));
		if(FAILED(hr))
		{
			MessageBox(0,"error!",0,0);
			breturn = false;
		}
		else
		{
			pXmlDoc->load(_bstr_t(pszFilePath));
			pXmlNode = pXmlDoc->selectSingleNode(_bstr_t("Classes/class/Functions/function[@ID='" + strID + "']"));
			if(pXmlNode != NULL)
			{
				if(MessageBox(NULL, "确定要删除该类成员?", "警告", MB_YESNO) !=IDYES)
				{		
					breturn = false;
				}
				else
				{
					pXmlParentNode = pXmlDoc->selectSingleNode(_bstr_t("Classes/class/Functions"));
					pXmlParentNode->removeChild(pXmlNode);
				}
			}
			else
			{
				MessageBox(NULL, strClassName + "该类的文档不存在", 0, 0);
			}
				
			pXmlDoc->save(_bstr_t(pszFilePath));	
		}
	}
	catch(_com_error& e)
	{
		MessageBox(0, W2A(e.Description()),0,0);
	}
	
	return breturn;
}

BOOL CDocManage::DeleteProperty(CString strClassName, int ID)
{
	USES_CONVERSION;
 	HRESULT hr = NULL;
	BOOL breturn = true;
	char pszFilePath[160];
	memset(pszFilePath, 0, sizeof(pszFilePath));
	sprintf(pszFilePath,"%s\\%s%s", theApp.m_strLocPath, strClassName, FILEEXT);
	CString strID;
	strID.Format("%d", ID);

	IXMLDOMDocumentPtr pXmlDoc;
	IXMLDOMNodePtr pXmlNode;
	IXMLDOMNodePtr pXmlParentNode;
	IXMLDOMNodeListPtr pXmlNodeList;
	
	try
	{	
		hr = pXmlDoc.CreateInstance(__uuidof(DOMDocument));
		if(FAILED(hr))
		{
			MessageBox(0,"error!",0,0);
			breturn = false;
		}
		else
		{
			pXmlDoc->load(_bstr_t(pszFilePath));
			pXmlNode = pXmlDoc->selectSingleNode(_bstr_t("Classes/class/Propertys/property[@ID='" + strID + "']"));
			if(pXmlNode != NULL)
			{
				if(MessageBox(NULL, "确定要删除该类成员?", "警告", MB_YESNO) !=IDYES)
				{		
					breturn = false;
				}
				else
				{
					pXmlParentNode = pXmlDoc->selectSingleNode(_bstr_t("Classes/class/Propertys"));
					pXmlParentNode->removeChild(pXmlNode);
				}
			}
			else
			{
				MessageBox(NULL, strClassName + "该类的文档不存在", 0, 0);
			}
				
			pXmlDoc->save(_bstr_t(pszFilePath));	
		}
	}
	catch(_com_error& e)
	{
		MessageBox(0, W2A(e.Description()),0,0);
	}
	
	return breturn;
}

long CDocManage::GetMemberNum(CString strClassName, CString strQuery)
{
	USES_CONVERSION;
 	HRESULT hr = NULL;
	long num = 0;
	char pszFilePath[160];
	memset(pszFilePath, 0, sizeof(pszFilePath));
	sprintf(pszFilePath,"%s\\%s%s", theApp.m_strLocPath, strClassName, FILEEXT);
	
	IXMLDOMDocumentPtr pXmlDoc;
	IXMLDOMNodePtr pXmlNode;
	IXMLDOMNodeListPtr pXmlNodeList;

	try
	{	
		hr = pXmlDoc.CreateInstance(__uuidof(DOMDocument));
		if(FAILED(hr))
		{
			MessageBox(0,"error!",0,0);
		}
		else
		{
			pXmlDoc->load(_bstr_t(pszFilePath));
			pXmlNodeList = pXmlDoc->selectNodes(_bstr_t(strQuery));
			num = pXmlNodeList->Getlength();
		}
	}
	catch(_com_error& e)
	{
		MessageBox(0, W2A(e.Description()),0,0);
	}
	
	return num;
}

⌨️ 快捷键说明

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