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

📄 sitemanager.cpp

📁 一个FTP下载的源代码。代码质量非常高
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			return TRUE;
		}
		else if (pMsg->wParam==VK_DELETE)
		{
			if (GetFocus()==&m_cTree)
			{
				HTREEITEM item=m_cTree.GetSelectedItem();
				if (!item)
					return TRUE;
				if (!m_cTree.GetParentItem(item))
					return TRUE;
				OnDelete();
				return TRUE;
			}
		}
	}
	
	return CDialog::PreTranslateMessage(pMsg);
}

void CSiteManager::OnDblclkSitemanagertree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;
	HTREEITEM item=m_cTree.GetSelectedItem();
	t_SiteManagerItem *site=0;
	if (item)
		site=(t_SiteManagerItem *)m_cTree.GetItemData(item);
	ASSERT(site);
	if (site->NodeType != SITE)
		return;
	*pResult = TRUE;
	OnOK();	
}

DWORD CSiteManager::RegDeleteKeyEx(CString subkey)
{
	HKEY key;
	int retval=RegOpenKeyEx(HKEY_CURRENT_USER,subkey,0,KEY_ALL_ACCESS,&key);
	if (retval==ERROR_SUCCESS)
	{
		TCHAR buffer[1024];
		int index=0;
		while (RegEnumKey(key,index,buffer,1024)==ERROR_SUCCESS)
		{
			CString newkey=subkey+"\\";
			newkey+=buffer;
			if ((retval=RegDeleteKeyEx(newkey)) != ERROR_SUCCESS)
				index++;
		}
		RegCloseKey(key);
		retval=RegDeleteKey(HKEY_CURRENT_USER,subkey);
	}
	return retval;
}

void CSiteManager::OnEndlabeleditSitemanagertree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
	if (!pTVDispInfo->item.pszText)
		return;

	CString newstr=pTVDispInfo->item.pszText;
	newstr.MakeLower();
	HTREEITEM item=m_cTree.GetNextSiblingItem(pTVDispInfo->item.hItem);
	while(item)
	{
		CString oldstr=m_cTree.GetItemText(item);
		oldstr.MakeLower();
		if (oldstr==newstr)
		{
			AfxMessageBox(IDS_ERRORMSG_SITEMANAGERNAMEINUSE,MB_OK|MB_ICONEXCLAMATION);
			m_cTree.SetFocus();
			m_cTree.EditLabel(pTVDispInfo->item.hItem);
			*pResult=0;
			return;
		}
		item=m_cTree.GetNextSiblingItem(item);
	}
	item=m_cTree.GetPrevSiblingItem(pTVDispInfo->item.hItem);
	while(item)
	{
		CString oldstr=m_cTree.GetItemText(item);
		oldstr.MakeLower();
		if (oldstr==newstr)
		{
			AfxMessageBox(IDS_ERRORMSG_SITEMANAGERNAMEINUSE,MB_OK|MB_ICONEXCLAMATION);
			m_cTree.SetFocus();
			m_cTree.EditLabel(pTVDispInfo->item.hItem);
			*pResult=0;
			return;
		}
		item=m_cTree.GetPrevSiblingItem(item);
	}
	item=pTVDispInfo->item.hItem;
	CString path;
	while (m_cTree.GetParentItem(item))
	{
		path=m_cTree.GetItemText(item)+"\\"+path;
		item=m_cTree.GetParentItem(item);
	}
	path.TrimRight( _T("\\") );
	m_KeysToDelete.push_back(path);
	m_cTree.SetItemText(pTVDispInfo->item.hItem,pTVDispInfo->item.pszText);
	((t_SiteManagerItem*)m_cTree.GetItemData(pTVDispInfo->item.hItem))->name = pTVDispInfo->item.pszText;

	if (COptions::GetOptionVal(OPTION_SORTSITEMANAGERFOLDERSFIRST))
	{
		TVSORTCB pMy_Sort;
		pMy_Sort.hParent = m_cTree.GetParentItem(pTVDispInfo->item.hItem);
		pMy_Sort.lpfnCompare = SortFoldersFirst;
		pMy_Sort.lParam = (LPARAM) &m_cTree;
		m_cTree.SortChildrenCB(&pMy_Sort);
	}
	else
		m_cTree.SortChildren(m_cTree.GetParentItem(pTVDispInfo->item.hItem));

	*pResult = TRUE;
}

void CSiteManager::OnSitemanagerNewfolder() 
{
	if (!CheckValid())
		return;
	HTREEITEM parent=m_cTree.GetSelectedItem();
	if (!parent)
		parent=m_cTree.GetRootItem();
	if (((t_SiteManagerItem *)m_cTree.GetItemData(parent))->NodeType == SITE)
		parent=m_cTree.GetParentItem(parent);
	
	CString name;
	name.Format(IDS_SITEMANAGER_NEWFOLDER);

	HTREEITEM child=m_cTree.GetChildItem(parent);
	int i=2;
	while (child)
	{
		CString name2=name;
		name2.MakeLower();
		CString childstr=m_cTree.GetItemText(child);
		childstr.MakeLower();
		if (childstr==name2)			
		{
			child=m_cTree.GetChildItem(parent);
			name.Format(IDS_SITEMANAGER_NEWFOLDERWITHNUM,i);
			i++;
			continue;
		}
		child=m_cTree.GetNextItem(child,TVGN_NEXT);
	}
	
	HTREEITEM item=m_cTree.InsertItem(name,0,0,parent,TVI_SORT);
	t_SiteManagerItem *pFolder = new t_SiteManagerItem;
	pFolder->name=name;
	pFolder->NodeType=FOLDER;
	m_cTree.SetItemData(item, (DWORD)pFolder);
	// Re-sort with folders first if that option is selected.  This must come AFTER the SetItemData command above.
	if (COptions::GetOptionVal(OPTION_SORTSITEMANAGERFOLDERSFIRST))
	{
		TVSORTCB pMy_Sort;
		pMy_Sort.hParent = parent;
		pMy_Sort.lpfnCompare = SortFoldersFirst;
		pMy_Sort.lParam = (LPARAM) &m_cTree;
		m_cTree.SortChildrenCB(&pMy_Sort);
	}

	m_cTree.Expand(parent,TVE_EXPAND);m_cTree.SelectItem(item);
	DisplaySite(0);
	m_cTree.EditLabel(item);	
}

t_SiteManagerItem * CSiteManager::GetDefaultSite(CString substring)
{
	if (substring == "")
	{
		CMarkupSTL *pMarkup;
		if (COptions::LockXML(&pMarkup))
		{
			pMarkup->ResetPos();
			if (pMarkup->FindChildElem( _T("Sites") ))
			{
				pMarkup->IntoElem();
				t_SiteManagerItem *pSite = GetDefaultSiteXML(pMarkup);
				COptions::UnlockXML();
				return pSite;	
			}
			COptions::UnlockXML();
		}
	}
	
	HKEY key;
	if (RegOpenKey(HKEY_CURRENT_USER,"Software\\FileZilla\\Site Manager\\"+substring,&key)==ERROR_SUCCESS)
	{
		TCHAR buffer[1000];
		int index=0;
		unsigned char value[1000];
		DWORD length=1000;
		CString value2=value;
		value[0]=0;
		RegQueryValueEx(key, _T(""), 0, 0, value, &length);
		if (!_tcscmp((LPCTSTR)value, _T("Folder") ) || substring=="")
		{
			length=1000;
			while(RegEnumKeyEx(key,index,buffer,&length,0,0,0,0)==ERROR_SUCCESS)
			{
				t_SiteManagerItem *site;
				if(substring == "")
					site=GetDefaultSite(buffer);
				else
					site=GetDefaultSite(substring+"\\"+buffer);
				if (site)
					return site;
				index++;
				length=1000;
			}	
		}
		else
		{
			t_SiteManagerItem *site=GetData(substring);
			if (site)
			{
				if (GetKey(substring,"Default Site")=="1")
					return site;
				else 
					delete site;
			}
			index++;
			length=1000;
		}
		RegCloseKey(key);
	}
	return 0;
}

t_SiteManagerItem * CSiteManager::GetDefaultSiteXML(CMarkupSTL *pMarkup)
{
	while (pMarkup->FindChildElem())
	{
		if (pMarkup->GetChildTagName()==_T("Folder") )
		{
			pMarkup->IntoElem();
			t_SiteManagerItem *pSite=GetDefaultSiteXML(pMarkup);
			if (pSite)
				return pSite;
			pMarkup->OutOfElem();
		}
		else if (pMarkup->GetChildTagName()==_T("Site") )
		{
			t_SiteManagerItem *site=GetDataXML(pMarkup);
			if (site)
			{
				if (_ttoi(pMarkup->GetChildAttrib( _T("DefaultSite") )))
					return site;
				else
					delete site;
			}

		}
	}
	return 0;
}

void CSiteManager::OnBegindragSitemanagertree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Code f黵 die Behandlungsroutine der Steuerelement-Benachrichtigung hier einf黦en

	//Start of a Drag&Drop operation
	*pResult = 0;

	if (!CheckValid())
	{
		return;
	}

	if (!pNMTreeView->itemNew.hItem || pNMTreeView->itemNew.hItem==m_cTree.GetRootItem())
		return;

	m_cTree.EnsureVisible(pNMTreeView->itemNew.hItem);
	

	m_pDragImage=m_cTree.CreateDragImage(pNMTreeView->itemNew.hItem);
	if (m_pDragImage == NULL)
	{
		return;
	}
	m_hDragItem=pNMTreeView->itemNew.hItem;

	CRect rect; 
	::GetWindowRect(m_cTree.m_hWnd, &rect); 
	CPoint pt2 = pNMTreeView->ptDrag; 
	pt2.Offset(rect.left, rect.top);
	m_pDragImage->BeginDrag(0, CPoint(0,0));
	m_pDragImage->DragEnter(0, pt2); 

	SetCapture();
}

void CSiteManager::OnMouseMove(UINT nFlags, CPoint point) 
{	
	if (m_pDragImage) // In Drag&Drop mode ?
	{
		CPoint ptDropPoint(point);
		ClientToScreen(&ptDropPoint);
		CWnd* pDropWnd = CWnd::WindowFromPoint(ptDropPoint);

		m_pDragImage->DragMove(ptDropPoint);
		
		//Scroll through tree
		RECT rect;
		m_cTree.GetWindowRect(&rect);
		if (ptDropPoint.x>=rect.left && ptDropPoint.x<=rect.right)
		{
			m_CurPos=ptDropPoint;
			if (ptDropPoint.y<(rect.top+5))
			{
				if (!m_nDragScrollTimerID)
				{
					
					HTREEITEM hItem=m_cTree.GetFirstVisibleItem();
					if (hItem)
						hItem=m_cTree.GetNextItem(hItem, TVGN_PREVIOUSVISIBLE);
					if (hItem)
					{
						m_nDragScrollTimerID=SetTimer(365, 250, 0);
						m_pDragImage->DragShowNolock(FALSE);
						m_cTree.EnsureVisible(hItem);
						m_cTree.RedrawWindow();
						m_pDragImage->DragShowNolock(TRUE);
					}
				}
			}
			else if (ptDropPoint.y>(rect.bottom-5))
			{
				if (!m_nDragScrollTimerID)
				{
					HTREEITEM hItem=m_cTree.GetFirstVisibleItem();
					while(hItem)
					{
						
						RECT iRect;
						m_cTree.GetItemRect(hItem, &iRect, TRUE);
						if (iRect.bottom>=(rect.bottom-rect.top))
						{
							m_nDragScrollTimerID=SetTimer(365, 250, 0);
							m_pDragImage->DragShowNolock(FALSE);
							m_cTree.EnsureVisible(hItem);
							m_pDragImage->DragShowNolock(TRUE);
							break;
						}
						hItem=m_cTree.GetNextItem(hItem, TVGN_NEXTVISIBLE);
					}
				}
			}
			else
			{
				if (m_nDragScrollTimerID)
					KillTimer(m_nDragScrollTimerID);
				m_nDragScrollTimerID=0;
			}
		}
		if (pDropWnd != &m_cTree)
		{
			SetCursor(m_hcNo);
			return;
		}

		HTREEITEM hItem=m_cTree.HitTest(point);
		if (hItem!=m_hDropItem)
		{
			m_pDragImage->DragShowNolock(FALSE);
			m_cTree.SelectDropTarget(hItem); 
			m_pDragImage->DragShowNolock(TRUE);
			m_hDropItem=hItem;
		}

		int bError=FALSE;
		if (hItem==m_hDragItem)
			bError=FALSE;
		else if (!hItem || ((t_SiteManagerItem *)m_cTree.GetItemData(hItem))->NodeType == SITE)
			bError=TRUE;
		else
			bError=FALSE;
		HTREEITEM hTemp=hItem;
		hTemp=m_cTree.GetParentItem(hTemp);
		while ( (hTemp) )
		{
			if (hTemp==m_hDragItem)
				bError=TRUE;
			hTemp=m_cTree.GetParentItem(hTemp);
		}

		if (!bError)
		{
			CString dragstr=m_cTree.GetItemText(m_hDragItem);
			dragstr.MakeLower();
			HTREEITEM hChild=m_cTree.GetChildItem(hItem);
			while (hChild && !bError)
			{
				if (hChild!=m_hDragItem)
				{
					CString str=m_cTree.GetItemText(hChild);
					str.MakeLower();
					if (str==dragstr)
						bError=TRUE;
					else
						hChild=m_cTree.GetNextItem(hChild, TVGN_NEXT);				
				}
				else
					hChild=m_cTree.GetNextItem(hChild, TVGN_NEXT);				
			}
		}

		SetCursor( bError ? m_hcNo : m_hcArrow );

		return;
	}
		
	CDialog::OnMouseMove(nFlags, point);
}

void CSiteManager::OnLButtonUp(UINT nFlags, CPoint point) 
{
	if (m_pDragImage) // In Drag&Drop mode ?
	{
		if (m_nDragScrollTimerID)
			KillTimer(m_nDragScrollTimerID);
		m_nDragScrollTimerID=0;

		ASSERT(m_hDragItem);
		HTREEITEM hDropItem=m_cTree.GetDropHilightItem();
		m_cTree.SelectDropTarget(0);
		::ReleaseCapture();
		m_pDragImage->DragLeave(GetDesktopWindow());
		m_pDragImage->EndDrag();

		CPoint pt(point);
		ClientToScreen(&pt);
		CWnd* m_pDropWnd = WindowFromPoint(pt);

		if (m_pDropWnd == &m_cTree) 
		{
			BOOL nError=0;
			if (hDropItem==m_hDragItem || m_cTree.GetParentItem(m_hDragItem)==hDropItem)
				nError=2;
			else if (!hDropItem || ((t_SiteManagerItem*)m_cTree.GetItemData(hDropItem))->NodeType == SITE)
				nError=1;
			else
				nError=0;
			HTREEITEM hTemp=hDropItem;
			hTemp=m_cTree.GetParentItem(hTemp);
			while ( (hTemp) )
			{
				if (hTemp==m_hDragItem)
					nError=1;
				hTemp=m_cTree.GetParentItem(hTemp);
			}
			if (!nError)
			{
				CString dragstr=m_cTree.GetItemText(m_hDragItem);
				dragstr.MakeLower();
				HTREEITEM hChild=m_cTree.GetChildItem(hDropItem);
				while (hChild && !nError)
				{
					if (hChild!=m_hDragItem)
					{
						CString str=m_cTree.GetItemText(hChild);
						str.MakeLower();
						if (str==dragstr)
							nError=1;
						else
							hChild=m_cTree.GetNextItem(hChild, TVGN_NEXT);
					}
					else
						hChild=m_cTree.GetNextItem(hChild, TVGN_NEXT);
				}
			}

			if (nError==1)
				MessageBeep(MB_ICONEXCLAMATION);
			if (!nError)
			{ //Do the actual moving
				HTREEITEM hDragParent=m_cTree.GetParentItem(m

⌨️ 快捷键说明

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