亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? persistenttreectrl.cpp

?? 兩個有關xml文件的操作類
?? CPP
字號:
// PersistentTreeCtrl.cpp : implementation file
//

#include "stdafx.h"

#include "PersistentTreeCtrl.h"

#include <algorithm>
#include <cassert>

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

const int MAXTEXTLEN=1024;

/////////////////////////////////////////////////////////////////////////////
// CPersistentTreeCtrl

CPersistentTreeCtrl::CPersistentTreeCtrl()
{
}

CPersistentTreeCtrl::~CPersistentTreeCtrl()
{
}

BEGIN_MESSAGE_MAP(CPersistentTreeCtrl, CTreeCtrl)
	//{{AFX_MSG_MAP(CPersistentTreeCtrl)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPersistentTreeCtrl message handlers

void CPersistentTreeCtrl::SetImage(UINT id_bitmap)
{
	if(m_imagelist.m_hImageList==NULL)
		m_imagelist.Create(id_bitmap,16, 16, RGB(0, 0x80, 0x80));
	else
	{
		m_imagelist.DeleteImageList();
		m_imagelist.Create(id_bitmap,16, 16, RGB(0, 0x80, 0x80));
	}
	this->SetImageList(&m_imagelist, TVSIL_NORMAL);
}

void CPersistentTreeCtrl::InitTestItems()
{	
	HTREEITEM root = InsertItem("中華人民共和國",0,0);
	HTREEITEM subroot1=InsertItem("浙江",1,1,root);
	HTREEITEM subroot2=InsertItem("江蘇",1,1,root);
	HTREEITEM subroot3=InsertItem("安徽",1,1,root);
	HTREEITEM subroot4=InsertItem("江西",1,1,root);
	HTREEITEM subroot5=InsertItem("福建",1,1,root);
	HTREEITEM subroot6=InsertItem("上海",1,1,root);

	HTREEITEM subroot_SX=InsertItem("紹興",2,2,subroot1);
	InsertItem("嵊州",3,3,subroot_SX);
	InsertItem("新昌",3,3,subroot_SX);
	InsertItem("東陽",3,3,subroot_SX);

	InsertItem("溫州",2,2,subroot1);
	InsertItem("蕭山",2,2,subroot1);
	InsertItem("衢州",2,2,subroot1);
	
	InsertItem("常州",2,2,subroot2);
	InsertItem("蘇州",2,2,subroot2);
	InsertItem("無錫",2,2,subroot2);
	InsertItem("徐州",2,2,subroot2);


	InsertItem("合肥",2,2,subroot3);	
	InsertItem("安慶",2,2,subroot3);
	
	InsertItem("吉安",2,2,subroot4);

	InsertItem("福州",2,2,subroot5);
	InsertItem("廈門",2,2,subroot5);
	
	//SelectItem(root);
	//Expand(root, TVE_EXPAND);

	root = InsertItem("美國",0,0);
	InsertItem("加州",1,1,root);
	InsertItem("賓州",1,1,root);
	/*
	Expand(subroot1, TVE_EXPAND);
	Expand(subroot2, TVE_EXPAND);
	Expand(subroot3, TVE_EXPAND);
	Expand(subroot4, TVE_EXPAND);
	Expand(subroot5, TVE_EXPAND);*/

}

string CPersistentTreeCtrl::GetAllItemText()
{
	str_msg="";
	TraverseItems();
	return str_msg;
}

//traverse all items, DFS method
HTREEITEM CPersistentTreeCtrl::TraverseItems(HTREEITEM hItem)
{
	// If hItem is NULL, start search from root item.
	if (hItem == NULL)
		hItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_ROOT, 0);
	
	while (hItem != NULL)
	{
		CString str_tree;
		char szBuffer[MAXTEXTLEN+1];
		szBuffer[0]=0;
		
		TV_ITEM item;
		
		item.hItem = hItem;
		item.mask = TVIF_TEXT | TVIF_CHILDREN;
		item.pszText = szBuffer;
		item.cchTextMax = MAXTEXTLEN;
		::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)&item);
		str_tree=szBuffer;
		str_tree+=">";//add a separator
		
		str_msg+=str_tree;
		//item_vec.push_back( str_parent+str_tree );
		
		// Check whether we have child items.
		if (item.cChildren)
		{
			// Recursively traverse child items.
			HTREEITEM hItemFound, hItemChild;
			
			hItemChild = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM,
				TVGN_CHILD, (LPARAM)hItem);
			if(hItemChild!=NULL)
				hItemFound = TraverseItems( hItemChild);
			
			// Did we find it?
			if (hItemFound != NULL)
				return hItemFound;
		}
		
		// Go to next sibling item.
		hItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM,
			TVGN_NEXT, (LPARAM)hItem);
	}
	return hItem;
	
}


//have the item any duplicate children?
bool CPersistentTreeCtrl::HasDuplicateChild(HTREEITEM hItem)
{
	string str_tree;
	char szBuffer[MAXTEXTLEN+1];
	szBuffer[0]=0;
	
	TV_ITEM item;
	
	item.hItem = hItem;
	item.mask = TVIF_TEXT | TVIF_CHILDREN;
	item.pszText = szBuffer;
	item.cchTextMax = MAXTEXTLEN;	
	
	std::vector<string> vec;
	std::vector<string>::const_iterator iter;
	int result;

	while (hItem != NULL)
	{	
		item.hItem = hItem;
		::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)&item);
		vec.push_back(szBuffer);
		// Go to next sibling item.
		hItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM,
			TVGN_NEXT, (LPARAM)hItem);
	}
	
	for(iter=vec.begin(); iter!= vec.end(); ++iter)
	{
		result=std::count( vec.begin(), vec.end(), *iter );
		if  ( result > 1 )
			return true;//we found it!!
	}

	return false;
}

//has tree any duplicate items?
HTREEITEM CPersistentTreeCtrl::HasDuplicate(HTREEITEM hItem, bool& bDuplicate)
{
	if(hItem ==NULL)
		hItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_ROOT, 0);
	
	while (hItem != NULL)
	{
		char szBuffer[MAXTEXTLEN+1];
		szBuffer[0]=0;
		
		TV_ITEM item;
		
		item.hItem = hItem;
		item.mask = TVIF_TEXT | TVIF_CHILDREN;
		item.pszText = szBuffer;
		item.cchTextMax = MAXTEXTLEN;
		::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)&item);
	
		if(HasDuplicateChild(hItem))
		{
			bDuplicate=true;
			return NULL;
		}
		
		// Check whether we have child items.
		if (item.cChildren)
		{
			// Recursively traverse child items.
			HTREEITEM hItemFound, hItemChild;
			
			hItemChild = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM,
				TVGN_CHILD, (LPARAM)hItem);
			if(hItemChild!=NULL)
				hItemFound = HasDuplicate( hItemChild, bDuplicate);
			if(bDuplicate==true)
				return NULL;
			
			// Did we find it?
			if (hItemFound != NULL)
				return hItemFound;
		}
		
		// Go to next sibling item.
		hItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM,
			TVGN_NEXT, (LPARAM)hItem);
	}
	return hItem;
}

bool CPersistentTreeCtrl::HasDuplicate()
{
	bool bDuplicate=false;
	HasDuplicate(NULL, bDuplicate);
	return bDuplicate;
}

//traverse all items
HTREEITEM CPersistentTreeCtrl::SaveItems(void* pXmlfile, const char* tree_name, HTREEITEM hItem, string str_parent, bool bImage)
{
	CXMLFile* xmlfile=static_cast<CXMLFile*>(pXmlfile);

	// If hItem is NULL, start search from root item.
	if (hItem == NULL)
		hItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_ROOT, 0);
	
	while (hItem != NULL)
	{
		string str_tree;
		char szBuffer[MAXTEXTLEN+1];
		szBuffer[0]=0;
		
		TV_ITEM item;		
		item.hItem = hItem;
		item.mask = TVIF_TEXT| TVIF_CHILDREN|TVIF_IMAGE | TVIF_SELECTEDIMAGE;
		item.pszText = szBuffer;
		item.cchTextMax = MAXTEXTLEN;
		::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)&item);
		str_tree=szBuffer;

		if(bImage)
		{			
			//xmlfile->SetString(tree_name, (str_parent+str_tree).c_str(), "" );
			sprintf(szBuffer, "%d", item.iImage);
			xmlfile->SetAttribute(tree_name, (str_parent+str_tree).c_str(),
				"iImage", szBuffer);
			sprintf(szBuffer, "%d", item.iSelectedImage);
			xmlfile->SetAttribute(tree_name, (str_parent+str_tree).c_str(),
				"iSelectedImage", szBuffer);
		}else
		{			
			xmlfile->SetString(tree_name, (str_parent+str_tree).c_str(), "" );
		}

		str_tree+="/";//add a separator		
		// Check whether we have child items.
		if (item.cChildren)
		{
			// Recursively traverse child items.
			HTREEITEM hItemFound, hItemChild;
			
			hItemChild = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM,
				TVGN_CHILD, (LPARAM)hItem);
			if(hItemChild!=NULL)
				hItemFound = SaveItems(xmlfile, tree_name, hItemChild, str_parent+str_tree, bImage);
			
			// Did we find it?
			if (hItemFound != NULL)
				return hItemFound;
		}
		
		// Go to next sibling item.
		hItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM,
			TVGN_NEXT, (LPARAM)hItem);
	}
	return hItem;
	
}

//delete a tree record form the specific xml file
void CPersistentTreeCtrl::DeleteTreeRecord(const char* filename, const char* tree_name)
{
	CXMLFile xmlfile;//(filename);
	xmlfile.load(filename);
	xmlfile.DeleteSetting( string(tree_name) .c_str(), "");
	xmlfile.save();
}

bool CPersistentTreeCtrl::Save(const char* filename, const char* tree_name, bool bImage)
{
	assert(!HasDuplicate() && "     提示:樹控件每一層不應當有重復的項!     ");

	CXMLFile xmlfile(filename);
	SaveItems(&xmlfile, tree_name, NULL, "", bImage);
	xmlfile.save(filename);
	return true;
}

void CPersistentTreeCtrl::LoadItems(HTREEITEM hItem, MSXML2::IXMLDOMNodePtr& pNode, bool bImage)
{
	MSXML2::IXMLDOMNodePtr pTmpNode=NULL;
	MSXML2::IXMLDOMNodePtr pNdAttr=NULL;
	HTREEITEM hTmpItem=hItem;
	TV_INSERTSTRUCT TVIN;
	TVIN.hParent=hItem;
	TVIN.hInsertAfter=TVI_LAST;
	TV_ITEM item;
	char szBuffer[MAXTEXTLEN+1];
	szBuffer[0]=0;	

	while(pNode!=NULL)
	{	
		item.mask = TVIF_TEXT|TVIF_IMAGE | TVIF_SELECTEDIMAGE;
		item.pszText = szBuffer;
		item.cchTextMax = MAXTEXTLEN;
		if(bImage)
		{			
			pNdAttr=pNode->Getattributes()->getNamedItem("iImage");
			if(pNdAttr!=NULL)
			{
				strcpy(szBuffer, (const char*)pNdAttr->text );
				item.iImage=atoi(szBuffer);
			}
			pNdAttr=pNode->Getattributes()->getNamedItem("iSelectedImage");
			if(pNdAttr!=NULL)
			{		
				strcpy(szBuffer, (const char*)pNdAttr->text);
				item.iSelectedImage=atoi(szBuffer);	
			}
		}
		strcpy(szBuffer, (const char*)pNode->nodeName);
		TVIN.item=item;
		//hTmpItem=InsertItem(szBuffer, item.iImage, item.iSelectedImage, hItem);
		hTmpItem= (HTREEITEM)::SendMessage(m_hWnd, TVM_INSERTITEM, 0, (LPARAM)&TVIN);
	
		// Check whether we have child items.
		if (pNode->hasChildNodes())
		{
			pTmpNode=pNode->GetfirstChild();
			LoadItems(hTmpItem, pTmpNode, bImage);//item.hItem
		}
	
		pNode=pNode->GetnextSibling();
	}
}

bool CPersistentTreeCtrl::Load(const char* filename, const char* tree_name, bool bImage)
{
	CXMLFile xmlfile(filename);
	MSXML2::IXMLDOMNodePtr PtrNode;
	xmlfile.GetNode(tree_name, PtrNode);
	
	if(PtrNode==NULL)
		return false;
	PtrNode=PtrNode->GetfirstChild();	

	if(PtrNode==NULL)
		return false;
	LoadItems(NULL, PtrNode, bImage);	
	//Expand(GetRootItem(), TVE_EXPAND);	

	return true;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲v日本v欧美v久久精品| 亚洲福利视频一区| 日韩欧美不卡一区| 欧美精品久久99| 欧美在线你懂得| 欧美性受xxxx黑人xyx性爽| 91麻豆免费看| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 波多野结衣视频一区| 一本在线高清不卡dvd| 色呦呦日韩精品| 欧美一a一片一级一片| 欧美日韩不卡视频| 日韩精品一区在线观看| 久久亚区不卡日本| 亚洲欧洲日韩一区二区三区| 亚洲欧洲制服丝袜| 奇米色一区二区| 国产精品一区二区视频| 99久久99久久精品免费看蜜桃 | 欧美精选一区二区| 91精品久久久久久久99蜜桃| 日韩三级电影网址| 国产精品国产三级国产a| 亚洲码国产岛国毛片在线| 天天做天天摸天天爽国产一区 | 亚洲午夜免费视频| 国产在线不卡一区| 91国偷自产一区二区使用方法| 欧美体内she精视频| 久久久欧美精品sm网站| 亚洲男人的天堂一区二区| 美国十次综合导航| 色偷偷成人一区二区三区91 | 欧美日韩不卡在线| 国产日韩欧美一区二区三区乱码 | 亚洲欧美另类在线| 精品一区二区三区香蕉蜜桃| 91免费看`日韩一区二区| 91精品国产一区二区三区| 18涩涩午夜精品.www| 麻豆国产欧美日韩综合精品二区 | 99久久婷婷国产综合精品| 欧美日韩在线一区二区| 日本一区免费视频| 全国精品久久少妇| 色综合中文综合网| 久久伊人蜜桃av一区二区| 一区二区不卡在线视频 午夜欧美不卡在| 日韩中文字幕麻豆| 97久久久精品综合88久久| 精品欧美一区二区久久| 亚洲尤物视频在线| 97精品久久久午夜一区二区三区 | 色综合天天性综合| 久久九九全国免费| 蜜臀久久99精品久久久久宅男| 一本到不卡免费一区二区| 久久久精品人体av艺术| 久久精品99国产精品| 欧美午夜电影一区| 亚洲精品成a人| av资源网一区| 国产精品久久久久影院老司 | 久久国产精品99久久人人澡| 欧洲精品一区二区| 亚洲人亚洲人成电影网站色| 国产伦精品一区二区三区免费迷| 日韩一级黄色大片| 三级在线观看一区二区| 欧美日韩在线综合| 午夜精品久久久| 欧美高清视频不卡网| 丝袜a∨在线一区二区三区不卡| 一本大道久久精品懂色aⅴ| 亚洲免费观看在线观看| 91尤物视频在线观看| 亚洲欧美激情插 | 日韩精品一级二级| 6080yy午夜一二三区久久| 午夜精品福利一区二区三区蜜桃| 在线视频国内自拍亚洲视频| 亚洲免费在线电影| 欧美剧情电影在线观看完整版免费励志电影 | 日韩一区二区视频在线观看| 免费的国产精品| 久久久亚洲欧洲日产国码αv| 国产成人自拍网| 亚洲欧美日韩中文播放| 欧美亚洲综合在线| 麻豆国产精品一区二区三区| 国产日韩欧美制服另类| 色婷婷狠狠综合| 日韩福利视频网| 国产日产欧美一区二区视频| 99re66热这里只有精品3直播| 五月婷婷久久丁香| www一区二区| 色婷婷综合久色| 久久成人综合网| 亚洲特级片在线| 日韩视频不卡中文| jlzzjlzz亚洲日本少妇| 亚洲aⅴ怡春院| 久久精品视频免费观看| 欧美影视一区二区三区| 国内成人免费视频| 一区二区欧美精品| 久久久久国产精品人| 在线看国产日韩| 国产一区在线观看视频| 亚洲一区二区影院| 久久久国产精品麻豆| 欧美日韩1234| www.av亚洲| 精品一区二区三区蜜桃| 亚洲最新视频在线观看| 久久久久国产成人精品亚洲午夜| 色噜噜狠狠成人网p站| 国内精品不卡在线| 丝袜美腿高跟呻吟高潮一区| 亚洲欧美怡红院| 精品黑人一区二区三区久久 | 国产精品久久免费看| 欧美一区二区免费观在线| 99v久久综合狠狠综合久久| 国产综合久久久久久久久久久久| 一区二区中文字幕在线| 久久久午夜精品理论片中文字幕| 欧美性受极品xxxx喷水| 99久久国产免费看| 国产福利91精品一区| 国产mv日韩mv欧美| 视频在线观看一区二区三区| 亚洲色欲色欲www在线观看| 久久精品视频网| 精品99999| 日韩你懂的在线观看| 欧美群妇大交群中文字幕| 91美女福利视频| 99国产精品视频免费观看| 国产91清纯白嫩初高中在线观看| 老司机午夜精品| 精品一区二区三区香蕉蜜桃| 美腿丝袜一区二区三区| 日韩精品一二区| 美女在线一区二区| 日本vs亚洲vs韩国一区三区| 亚洲成a人在线观看| 亚洲sss视频在线视频| 亚洲一区二区三区四区在线免费观看| 自拍偷在线精品自拍偷无码专区 | 国产欧美综合在线| 国产视频一区二区在线| 中文字幕欧美三区| 国产精品久久久久影院色老大| 久久精品视频在线看| 日本一区二区成人| 中文字幕一区二区三区四区不卡 | av一本久道久久综合久久鬼色| 高潮精品一区videoshd| av欧美精品.com| 日本韩国欧美国产| 欧美日韩亚洲高清一区二区| 欧美日韩久久一区二区| 欧美一级久久久久久久大片| 日韩欧美亚洲另类制服综合在线| 99精品国产热久久91蜜凸| 色诱视频网站一区| 欧美老年两性高潮| 精品日产卡一卡二卡麻豆| 久久久电影一区二区三区| 中文字幕一区二区三区在线播放| 亚洲女人小视频在线观看| 午夜天堂影视香蕉久久| 蜜桃传媒麻豆第一区在线观看| 经典一区二区三区| 成人动漫一区二区三区| 在线观看亚洲精品| 精品少妇一区二区三区| 国产精品久久久久久久裸模| 一区二区久久久| 国产乱淫av一区二区三区 | 正在播放亚洲一区| 久久综合久久综合久久| 国产精品久久久久久久久搜平片| 亚洲国产精品欧美一二99| 国产主播一区二区三区| 91福利视频久久久久| 精品国产一区二区精华| 中文字幕不卡的av| 日本不卡视频在线| 99精品国产视频| 精品国产91乱码一区二区三区 | 午夜精品福利一区二区蜜股av | 国产精品久久久久久久久果冻传媒 | 久草这里只有精品视频| 99re热视频精品| 久久久久国产一区二区三区四区 | 欧美日韩激情一区二区三区|