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

📄 cxmlparserdemo.cpp

📁 《脚本驱动的应用软件开发方法与实践》源代码下载
💻 CPP
字号:
//
// CXmlParserDemo.cpp
//
// --------------------------------------------------------
// A Practical Guide to Script-Driven Software Development
// Author: Qiming Lu                        Date: 6/1/2006
// MSN Messager: luqiming26@hotmail.com
// MSN Blog: http://spaces.msn.com/jemylu
// --------------------------------------------------------

#include "stdafx.h"
#include "CXmlParserDemo.h"
#include "MiscUtils.h"

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

const char * kNode_MainWindow	= "MainWindow";
const char * kNode_ImageBox		= "ImageBox";
const char * kNode_Button		= "Button";
const char * kNode_Static		= "Static";
const char * kNode_Hyperlink	= "Hyperlink";

const char * kAttr_Version		= "version";
const char * kAttr_Skin			= "skin";
const char * kAttr_Name			= "name";
const char * kAttr_XPos			= "xpos";
const char * kAttr_YPos			= "ypos";
const char * kAttr_Width		= "width";
const char * kAttr_Height		= "height";

////////////////////////////////////////////////////////////////////////////
CXmlParserDemo::CXmlParserDemo() 
	: mXmlManager(0)
	, mMainWindowNode(0)
	, mCurrentNode(0)
{
}

CXmlParserDemo::~CXmlParserDemo()
{
	Finalize();
}

void CXmlParserDemo::Finalize()
{
	if (mCurrentNode)
	{
		mCurrentNode->Release();
		mCurrentNode = 0;
	}
	if (mMainWindowNode)
	{
		mMainWindowNode->Release();
		mMainWindowNode = 0;
	}
	if (mXmlManager)
	{
		delete mXmlManager;
		mXmlManager = 0;
	}
}

bool CXmlParserDemo::SetXmlFile(const char * inFile)
{
	Finalize();

	mXmlFile = inFile;
	mXmlManager = new CXmlWrapper(inFile);
	if (!mXmlManager->IsReady())
		return false;

	IXMLDOMNode* pRoot = mXmlManager->GetNodeFirstChild(NULL);
	if (pRoot)
	{
		// Retrieve the product version.
		CString version = mXmlManager->GetNodeAttr(pRoot, kAttr_Version);

#ifdef _DEBUG
		CString nodeName = mXmlManager->GetNodeName(pRoot);
#endif 

		// Get the first node under the root.
		// That is 'MainWindow' node.
		mMainWindowNode = mXmlManager->GetNodeFirstChild(pRoot);

		pRoot->Release();

		if (mMainWindowNode)
		{
			return true;
		}
	}
	return false;
}

CString CXmlParserDemo::GetMainWindowSkin()
{
	if (mMainWindowNode)
	{
		return mXmlManager->GetNodeAttr(mMainWindowNode, kAttr_Skin);
	}
	return CString("");
}

bool CXmlParserDemo::FindFirstNode()
{
	if (mMainWindowNode)
	{
		if (mCurrentNode)
			mCurrentNode->Release();

		mCurrentNode = mXmlManager->GetNodeFirstChild(mMainWindowNode);
		return (mCurrentNode != NULL);
	}
	return false;
}

bool CXmlParserDemo::FindNextNode()
{
	if (mCurrentNode)
	{
		IXMLDOMNode* newNode = mXmlManager->GetNodeNextSibling(mCurrentNode);
		mCurrentNode->Release();
		mCurrentNode = newNode;
		return (mCurrentNode != NULL);
	}
	return false;
}

bool CXmlParserDemo::FindButton(const char* inName)
{
	if (mCurrentNode)
	{
		mCurrentNode->Release();
		mCurrentNode = NULL;
	}

	if (mMainWindowNode)
	{
		IXMLDOMNode * pChild = mXmlManager->GetNodeFirstChild(mMainWindowNode);
		while (pChild && !mCurrentNode)
		{
			CString strName = mXmlManager->GetNodeAttr(pChild, kAttr_Name);
			if (mXmlManager->GetNodeName(pChild).Compare(kNode_Button) == 0 &&
				strName.Compare(inName) == 0)
			{
				mCurrentNode = pChild;
			}
			else
			{
				IXMLDOMNode * pNext = mXmlManager->GetNodeNextSibling(pChild);
				pChild->Release();
				pChild = pNext;
			}
		}
	}

	return (mCurrentNode != NULL);
}

// Get attributes of the current node
CString CXmlParserDemo::GetNodeName()
{
	if (mCurrentNode)
	{
		return mXmlManager->GetNodeName(mCurrentNode);
	}
	return CString("");
}

CString CXmlParserDemo::GetName()
{
	return GetAttribute(kAttr_Name);
}

CString CXmlParserDemo::GetSkin()
{
	return GetAttribute(kAttr_Skin);
}

long CXmlParserDemo::GetXPos()
{
	CString strValue = GetAttribute(kAttr_XPos);
	if (strValue != "")
	{
		return atol(strValue);
	}
	return -1;
}

long CXmlParserDemo::GetYPos()
{
	CString strValue = GetAttribute(kAttr_YPos);
	if (strValue != "")
	{
		return atol(strValue);
	}
	return -1;
}

long CXmlParserDemo::GetWidth()
{
	CString strValue = GetAttribute(kAttr_Width);
	if (strValue != "")
	{
		return atol(strValue);
	}
	return -1;
}

long CXmlParserDemo::GetHeight()
{
	CString strValue = GetAttribute(kAttr_Height);
	if (strValue != "")
	{
		return atol(strValue);
	}
	return -1;
}

void CXmlParserDemo::GetPosition(long& xpos, long& ypos, long& width, long& height)
{
	xpos = GetXPos();
	ypos = GetYPos();
	width  = GetWidth();
	height = GetHeight();
}

CString CXmlParserDemo::FullPath(CString const& inFileName)
{
	return CString(MiscUtils::GetSkinFolder() + "\\" + inFileName);
}

⌨️ 快捷键说明

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