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

📄 ztreecontrol.cpp

📁 Symbian手机智能操作系统下的源码,图像查看软件,支持十几种图形格式.
💻 CPP
📖 第 1 页 / 共 2 页
字号:

zTreeNode * zTreeControl::GetCurrent()
{
	if (!m_pNode || !m_pNode->hNode)
		return NULL;
	else
		return m_pNode;
}

zTreeNode * zTreeControl::GetNodeParam(HTREEITEM hti)
{
	TVITEM ti;
	TCHAR str[200]={0};
	zTreeNode * pNode = NULL;
	if (hti)
	{
		ti.mask = TVIF_PARAM | TVIF_HANDLE;
		ti.hItem = hti;
		TreeView_GetItem(m_hCtrl,&ti);
		pNode = (zTreeNode*) ti.lParam;
	}
	if (pNode)
	{
		return pNode;
	}else
		return NULL;
}

void zTreeControl::MoveFirst()
{
	//检查当前项有没有子项,如果有子项,暂不支持.
	HTREEITEM hti = TreeView_GetChild(m_hCtrl,m_pNode->hNode);
	if (hti) return;

	zTreeNode * pNode = m_pNode;

	Delete();
	AddSibling(pNode,TVI_FIRST);
	AddParentNum(pNode);

	SetCurrent(pNode);
}

void zTreeControl::MovePrev()
{
	//检查当前项有没有子项,如果有子项,暂不支持.
	HTREEITEM hti = TreeView_GetChild(m_hCtrl,m_pNode->hNode);
	if (hti) return;

	//如果当前项没有兄项,返回
	hti = TreeView_GetPrevSibling(m_hCtrl,m_pNode->hNode);
	if (!hti) return;
	
	//要插入到兄项的兄项的后面,即是兄项的前面,如果没有兄兄项,则插入到兄项的前面,即第一项.
	HTREEITEM hti2 = TreeView_GetPrevSibling(m_hCtrl,hti);
	if (!hti2) hti2=TVI_FIRST;

	//获取zTreeNode
	zTreeNode * pNode = m_pNode;

	//删除本项.
	Delete();
	//插入兄弟项
	AddSibling(pNode,hti2);
	AddParentNum(pNode);

	SetCurrent(pNode);
}

void zTreeControl::MoveNext()
{
	//检查当前项有没有子项,如果有子项,暂不支持.
	HTREEITEM hti = TreeView_GetChild(m_hCtrl,m_pNode->hNode);
	if (hti) return;

	//如果当前项没有弟项,返回
	hti = TreeView_GetNextSibling(m_hCtrl,m_pNode->hNode);
	if (!hti) return;
	
	//获取zTreeNode
	zTreeNode * pNode = m_pNode;
	//删除本项.
	Delete();
	//插入兄弟项
	AddSibling(pNode,hti);
	AddParentNum(pNode);

	SetCurrent(pNode);
}

void zTreeControl::MoveLast()
{
	//检查当前项有没有子项,如果有子项,暂不支持.
	HTREEITEM hti = TreeView_GetChild(m_hCtrl,m_pNode->hNode);
	if (hti) return;

	//获取zTreeNode
	zTreeNode * pNode = m_pNode;

	Delete();
	AddSibling(pNode,TVI_LAST);
	AddParentNum(pNode);

	SetCurrent(pNode);
}

void zTreeControl::MoveUp()
{
}

void zTreeControl::MoveDown()
{
}


void zTreeControl::ExpandRoot()
{
	HTREEITEM hti = TreeView_GetRoot(m_hCtrl);
	if (hti)
	{
		TreeView_Expand(m_hCtrl,hti,TVE_EXPAND);
	}
}

int zTreeControl::GotoRoot()
{
	HTREEITEM hti = TreeView_GetRoot(m_hCtrl);
	TVITEM ti;
	memset(&ti,0,sizeof(TVITEM));
	zTreeNode * pNode = NULL;
	if (hti)
	{
		ti.mask = TVIF_PARAM | TVIF_HANDLE;
		ti.hItem = hti;
		TreeView_GetItem(m_hCtrl,&ti);
		pNode = (zTreeNode*) ti.lParam;
	}
	return SetCurrent(pNode);
}

int zTreeControl::GotoChild()
{
	HTREEITEM hti = TreeView_GetChild(m_hCtrl,m_pNode->hNode);
	TVITEM ti;
	memset(&ti,0,sizeof(TVITEM));
	zTreeNode * pNode = NULL;
	if (hti)
	{
		ti.mask = TVIF_PARAM | TVIF_HANDLE;
		ti.hItem = hti;
		TreeView_GetItem(m_hCtrl,&ti);
		pNode = (zTreeNode*) ti.lParam;
	}
	return SetCurrent(pNode);
}

int zTreeControl::GotoPrevSibling()
{
	HTREEITEM hti = TreeView_GetPrevSibling(m_hCtrl,m_pNode->hNode);
	TVITEM ti;
	memset(&ti,0,sizeof(TVITEM));
	zTreeNode * pNode = NULL;
	if (hti)
	{
		ti.mask = TVIF_PARAM | TVIF_HANDLE;
		ti.hItem = hti;
		TreeView_GetItem(m_hCtrl,&ti);
		pNode = (zTreeNode*) ti.lParam;
	}
	return SetCurrent(pNode);
}

int zTreeControl::GotoNextSibling()
{
	HTREEITEM hti = TreeView_GetNextSibling(m_hCtrl,m_pNode->hNode);
	TVITEM ti;
	memset(&ti,0,sizeof(TVITEM));
	zTreeNode * pNode = NULL;
	if (hti)
	{
		ti.mask = TVIF_PARAM | TVIF_HANDLE;
		ti.hItem = hti;
		TreeView_GetItem(m_hCtrl,&ti);
		pNode = (zTreeNode*) ti.lParam;
	}
	return SetCurrent(pNode);
}

int zTreeControl::GotoParent()
{
	HTREEITEM hti = TreeView_GetParent(m_hCtrl,m_pNode->hNode);
	TVITEM ti;
	memset(&ti,0,sizeof(TVITEM));
	zTreeNode * pNode = NULL;
	if (hti)
	{
		ti.mask = TVIF_PARAM | TVIF_HANDLE;
		ti.hItem = hti;
		TreeView_GetItem(m_hCtrl,&ti);
		pNode = (zTreeNode*) ti.lParam;
	}
	return SetCurrent(pNode);
}

int zTreeControl::Foreach(zTreeNode * pCurrent,int nWorkType)
{
	zTreeNode * pNode = NULL;
	if (pCurrent)
		pNode = pCurrent;
	else
		pNode = GetCurrent();

	if (pNode)
	{
		bl(pNode->hNode,nWorkType);
	}
	return 0;
}

void zTreeControl::bl(HTREEITEM hti,int nWorkType)
{
	//操作,遍历选择项.
	while(hti)
	{
		zTreeNode * pNode = this->GetNodeParam(hti);
		deal(pNode,nWorkType);

		HTREEITEM hClient = TreeView_GetChild(m_hCtrl,hti);
		if (hClient)		//有子项
		{
			bl(hClient,nWorkType);
		}

		hti = TreeView_GetNextSibling(m_hCtrl,hti);
	}
}

void zTreeControl::deal(zTreeNode * pNode,int nWorkType)
{
	this->FlushText(pNode);
}

int zTreeControl::OnPopupMenu(POINT point)
{
	if (m_nMenuId<=0) return 0;

//	TCHAR sz[300]={0};
	HMENU hMenu;
	HMENU hMenuTrackPopup;
    
	hMenu = LoadMenu (m_hInst, MAKEINTRESOURCE(m_nMenuId));
	if (NULL != hMenu)
	{
		hMenuTrackPopup = GetSubMenu(hMenu, 0);

		POINT pt;
		TVHITTESTINFO tti;
		GetCursorPos(&pt);
		tti.pt = pt;
		ScreenToClient(m_hCtrl,&tti.pt);
		HTREEITEM hi = TreeView_HitTest(m_hCtrl,&tti);
		if(hi && (tti.flags && TVHT_ONITEM))
		{
			//在项上面弹出菜单
			TreeView_SelectItem(m_hCtrl,hi);
			HWND hParent = ::GetParent(m_hCtrl);
			TrackPopupMenu(hMenuTrackPopup, TPM_LEFTALIGN|TPM_TOPALIGN, pt.x, pt.y, 0, hParent, NULL);
			DestroyMenu(hMenu);
		}else
		{
			//不在项上面弹出菜单
		}
	}else	return 0;
	return 1;
}

void zTreeControl::FlushDiskTree(TCHAR * pPath)
{
	zTreeNode * pNode = new zTreeNode();
	_tcscpy(pNode->sPath,pPath);
	_tcscpy(pNode->sName,_T("\\"));
	pNode->nState = 1;

	AddRoot(pNode);

//	blDiskTree(path);
}


int zTreeControl::OnDispInfo(LPNMHDR lParam)
{
	//示范代码
	TV_DISPINFO *pLvdi = (TV_DISPINFO *)lParam;
	TV_ITEM *pItem = &pLvdi->item;
	zTreeNode *pNode = (zTreeNode *)(pItem->lParam);
	static TCHAR szText[100];
	TCHAR szTmp[1000]={0};
	if (pItem->mask & TVIF_TEXT)
	{
		//文本设定
		wsprintf(szText,_T("%s"),pNode->sName);
//		if(m_flags.bShowChildNumber || m_flags.bShowItemProperties)
//		{
//			_tcscat(szText,_T("("));
//			if(m_flags.bShowChildNumber)	
//			{
//				wsprintf(szTmp,_T("%d"),pNode->nChild);
//				_tcscat(szText,szTmp);
//			}
//			if(m_flags.bShowItemProperties)
//			{
//				wsprintf(szTmp,_T(".%d"),pNode->m_Properties.GetSize());
//				_tcscat(szText,szTmp);
//			}
//			_tcscat(szText,_T(")"));
//		}
		_tcsncpy(pItem->pszText,szText,pItem->cchTextMax);
	}

	if (pItem->mask & TVIF_IMAGE)
	{
		//图标设定
		if (pNode->nState==1)
			pItem->iImage = 5;
		else
			pItem->iImage = 12;
		}

	if (pItem->mask & TVIF_SELECTEDIMAGE)
	{
		//选择图标设定
		if (pNode->nState==1)
			pItem->iSelectedImage = 6;
		else
			pItem->iSelectedImage = 12;
	}
	
	//wsprintf(szTmp,_T("%s,%d,"),pNode->sName,pItem->state);
	//if (pItem->state & TVIS_BOLD)			_tcscat(szTmp,_T("TVIS_BOLD "));
	//if (pItem->state & TVIS_CUT )			_tcscat(szTmp,_T("TVIS_CUT  "));
	//if (pItem->state & TVIS_DROPHILITED)	_tcscat(szTmp,_T("TVIS_DROPHILITED "));
	//if (pItem->state & TVIS_EXPANDED )		_tcscat(szTmp,_T("TVIS_EXPANDED  "));
	//if (pItem->state & TVIS_EXPANDEDONCE )	_tcscat(szTmp,_T("TVIS_EXPANDEDONCE  "));
	//if (pItem->state & TVIS_EXPANDPARTIAL)	_tcscat(szTmp,_T("TVIS_EXPANDPARTIAL  "));
	//if (pItem->state & TVIS_SELECTED )		_tcscat(szTmp,_T("TVIS_SELECTED  "));
	//if (pItem->state & TVIS_OVERLAYMASK )	_tcscat(szTmp,_T("TVIS_OVERLAYMASK  "));
	//if (pItem->state & TVIS_STATEIMAGEMASK)_tcscat(szTmp,_T("TVIS_STATEIMAGEMASK   "));
	//if (pItem->state & TVIS_USERMASK  )	_tcscat(szTmp,_T("TVIS_USERMASK   "));
	//_tcscat(szTmp,_T("\n"));
	//::OutputDebugString(szTmp);
	return 0;
}

void zTreeControl::OnDblclk(zTreeNode * pNode)
{
//	TCHAR szbufW[MAX_PATH]={0};
//	_tcscpy(szbufW,pNode->sName);
//	if (_tcsncicmp(szbufW, _T("exe."),4) != 0) return;
//	_tcscpy(szbufW,pNode->sPath);
//	_tcscat(szbufW,_T("\\"));
//	_tcscat(szbufW,pNode->sName);
//	CreateProcess(szbufW, NULL, NULL, NULL, FALSE, 0, NULL, NULL, NULL, NULL);
}

void zTreeControl::OnClick(zTreeNode * pNode)
{
	TCHAR sz[300]={0};
	if(pNode->nState==1)
	{
		wsprintf(sz,_T("Directory! %s\n"),pNode->sName);
		if(!pNode->bShow)
		{
			blDiskTree(pNode->sPath);
			pNode->bShow = TRUE;
		}
	}else if(pNode->nState==0)
	{
		wsprintf(sz,_T("File! %s\n"),pNode->sName);
	}
	::OutputDebugString(sz);


}

//BOOL SortByName(zTreeControl::zTreeNode * p1,zTreeControl::zTreeNode * p2)
//{
//	if(p1->nState>p2->nState) return TRUE;
//	else return _tcscmp(p1->sName,p2->sName);
//}

void zTreeControl::blDiskTree(TCHAR * pPath)
{
	//操作,遍历选择项.
	TCHAR sz[MAX_PATH]={0};
	TCHAR pa[MAX_PATH]={0};
	TCHAR pn[MAX_PATH]={0};
	_tcscpy(pa,pPath);
	_tcscpy(pn,pPath);
	_tcscat(pn,_T("\\*.*"));

	zFileFind ff;
	ff.FindFirstFile(pn);
	if (ff.m_hFind!=INVALID_HANDLE_VALUE)
	{
//		vector<zTreeNode *> vNode;
//		vNode.clear();
		do{
			_tcscpy(sz,ff.m_find.cFileName);

			if(ff.m_find.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
			{
				zTreeNode * pNode = new zTreeNode();
				_tcscpy(pNode->sPath,pa);	_tcscat(pNode->sPath,_T("\\"));	 _tcscat(pNode->sPath,sz);
				_tcscpy(pNode->sName,sz);
				pNode->nState = 1;		//Directory
//				vNode.push_back(pNode);
				AddChild(pNode);
//			}else
//			{
//				pNode->nState = 0;		//file
//				AddChild(pNode);
//				vNode.push_back(pNode);
//				delete pNode;
			}
		}while(ff.FindNextFile());
//		int num = (int)vNode.size();
//		if(num>0) sort(vNode.begin(),vNode.end(),SortByName);
//		for(int i=0;i<num;i++)
//		{
//			AddChild(vNode[i]);
//		}
//		vNode.clear();
	}
	ff.FindClose();
}


/*
			_tcscpy(sz,ff.m_find.cFileName);

			zTreeNode * pNode = new zTreeNode();
			_tcscpy(pNode->sPath,pa);	_tcscat(pNode->sPath,_T("\\"));	 _tcscat(pNode->sPath,sz);
			_tcscpy(pNode->sName,sz);
			if(ff.m_find.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
			{
				pNode->nState = 1;		//Directory
				AddChild(pNode);
			}else
			{
				pNode->nState = 0;		//file
				AddChild(pNode);
			}
*/

⌨️ 快捷键说明

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