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

📄 mainfrm.cpp

📁 一个FTP下载的源代码。代码质量非常高
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	{
		CString folder = GetLocalPane2()->GetLocalFolder();
		GetLocalPane2()->SetLocalFolder(folder);
		GetLocalPane()->GetTreeCtrl()->DisplayTree(NULL, FALSE);
		GetLocalPane()->GetTreeCtrl()->SetSelPath(folder);
	}
}

void CMainFrame::OnToolbarReconnect() 
{
	if (m_pCommandQueue->IsBusy() || m_pCommandQueue->IsConnected())
		return;
	
	t_server server;
	CServerPath path;
	if (m_pCommandQueue->GetLastServer(server, path))
	{
		m_pCommandQueue->Connect(server);
		if (path.IsEmpty())
			m_pCommandQueue->List(FZ_LIST_USECACHE,TRUE);
		else
			m_pCommandQueue->List(path,FZ_LIST_USECACHE,TRUE);
	}
}

void CMainFrame::OnUpdateToolbarReconnect(CCmdUI* pCmdUI) 
{
	BOOL enable=FALSE;
	if (m_pCommandQueue->IsConnected() || m_pCommandQueue->IsBusy())
		pCmdUI->Enable(FALSE);
	else
	{
		CString host,user,pass;
		int port;
		host=COptions::GetOption(OPTION_LASTSERVERHOST);
		port=COptions::GetOptionVal(OPTION_LASTSERVERPORT);
		user=COptions::GetOption(OPTION_LASTSERVERUSER);
		//pass=crypt.decrypt(COptions::GetOption(OPTION_LASTSERVERPASS));		
		if ((host!="")&&(port!=0))//&&(user!=""))
			enable=TRUE;
		
		pCmdUI->Enable(enable);
	}
	
}

CImageList* CMainFrame::CreateDragImageEx(CListCtrl *pList, LPPOINT lpPoint)
{
	if (pList->GetSelectedCount() <= 0)
		return NULL; // no row selected


	DWORD dwStyle = GetWindowLong(pList->m_hWnd, GWL_STYLE) & LVS_TYPEMASK;

	CRect rectComplete(0, 0, 0, 0);

	// Determine List Control Client width size
	CRect rectClient;
	pList->GetClientRect(rectClient);
	int nWidth = rectClient.Width() + 50;

	// Start and Stop index in view area
	int nIndex = pList->GetTopIndex() - 1;
	int nBottomIndex = pList->GetTopIndex() + pList->GetCountPerPage();
	if (nBottomIndex > (pList->GetItemCount() - 1))
		nBottomIndex = pList->GetItemCount() - 1;

	// Determine the size of the drag image (limited for rows visibled and client width)
	while ((nIndex = pList->GetNextItem(nIndex, LVNI_SELECTED)) != -1)
	{
		if (nIndex > nBottomIndex)
			break; 

		CRect rectItem;
		pList->GetItemRect(nIndex, rectItem, LVIR_BOUNDS);

		if (rectItem.left < 0) 
			rectItem.left = 0;

		if (rectItem.right > nWidth)
			rectItem.right = nWidth;

		rectComplete.UnionRect(rectComplete, rectItem);
	}
		
	// Create memory device context
	CClientDC dcClient(this);
	CDC dcMem;
	CBitmap Bitmap;

	if (!dcMem.CreateCompatibleDC(&dcClient))
		return NULL;

	if (!Bitmap.CreateCompatibleBitmap(&dcClient, rectComplete.Width(), rectComplete.Height()))
		return NULL;

	CBitmap *pOldMemDCBitmap = dcMem.SelectObject(&Bitmap);
	// Use green as mask color
 	dcMem.FillSolidRect(0, 0, rectComplete.Width(), rectComplete.Height(), RGB(0,255,0));

	// Don't use antialiased font for the dragimages
	CFont *pFont = pList->GetFont();
	LOGFONT lf;
	pFont->GetLogFont(&lf);
	lf.lfQuality = NONANTIALIASED_QUALITY;
	CFont newFont;
	newFont.CreateFontIndirect(&lf);

	CFont *oldFont = dcMem.SelectObject(&newFont);

	// Paint each DragImage in the DC
	nIndex = pList->GetTopIndex() - 1;
	while ((nIndex = pList->GetNextItem(nIndex, LVNI_SELECTED)) != -1)
	{	
		if (nIndex > nBottomIndex)
			break;

		TCHAR buffer[1000];
		LVITEM item = {0};
		item.mask = LVIF_TEXT | LVIF_IMAGE;
		item.iItem = nIndex;
		item.pszText = buffer;
		item.cchTextMax = 999;

		pList->GetItem(&item);
		
		// Draw the icon
		CImageList* pSingleImageList = pList->GetImageList((dwStyle == LVS_ICON)?LVSIL_NORMAL:LVSIL_SMALL);
		if (pSingleImageList)
		{
			CRect rectIcon;
			pList->GetItemRect(nIndex, rectIcon, LVIR_ICON);

			IMAGEINFO info;
			pSingleImageList->GetImageInfo(item.iImage, &info);
			CPoint p((rectIcon.left - rectComplete.left + rectIcon.right - rectComplete.left) / 2 - (info.rcImage.right - info.rcImage.left) / 2, 
				(rectIcon.top - rectComplete.top + rectIcon.bottom - rectComplete.top) / 2 - (info.rcImage.bottom - info.rcImage.top) / 2 + ((dwStyle == LVS_ICON)?2:0));

			pSingleImageList->Draw( &dcMem, item.iImage, 
									p,
									ILD_TRANSPARENT);
		}

		// Draw the text
		CString text;
		text = item.pszText;
		CRect textRect;
		pList->GetItemRect( nIndex, textRect, LVIR_LABEL );
		textRect.top -= rectComplete.top - 2;
		textRect.bottom -= rectComplete.top + 1;
		textRect.left -= rectComplete.left - 2;
		textRect.right -= rectComplete.left;
		
		DWORD flags = DT_END_ELLIPSIS | DT_MODIFYSTRING;
		if (dwStyle == LVS_ICON)
			flags |= DT_CENTER | DT_WORDBREAK;
		dcMem.DrawText(text, -1, textRect, flags);
	}

	dcMem.SelectObject(oldFont);

	dcMem.SelectObject(pOldMemDCBitmap);

	// Create drag image(list)
	CImageList* pCompleteImageList = new CImageList;
	pCompleteImageList->Create(rectComplete.Width(), rectComplete.Height(), ILC_COLOR32 | ILC_MASK, 0, 1);
	pCompleteImageList->Add(&Bitmap, RGB(0, 255, 0)); // Green is used as mask color
	Bitmap.DeleteObject();

	if (lpPoint)
	{
		lpPoint->x = rectComplete.left;
		lpPoint->y = rectComplete.top;
	}

	return pCompleteImageList;
}

CImageList* CMainFrame::CreateDragImageEx(CTreeCtrl *pTree, LPPOINT lpPoint)
{
	HTREEITEM hItem;
	
	if (pTree == GetLocalPane()->GetTreeCtrl())
		hItem = reinterpret_cast<CDirTreeCtrl *>(pTree)->m_hDragSource;
	else
		hItem = reinterpret_cast<CFtpTreeCtrl *>(pTree)->m_hDragSource;

	if (!hItem)
		return NULL; // no row selected

	CRect rectComplete(0, 0, 0, 0);

	// Determine List Control Client width size
	CRect rectClient;
	pTree->GetClientRect(rectClient);
	int nWidth = rectClient.Width();

	CRect rectItem;
	pTree->GetItemRect(hItem, rectItem, FALSE);

	if (rectItem.left < 0) 
		rectItem.left = 0;

	if (rectItem.right > (nWidth + 50))
		rectItem.right = nWidth + 50;
	rectComplete.UnionRect(rectComplete, rectItem);

		
	// Create memory device context
	CClientDC dcClient(this);
	CDC dcMem;
	CBitmap Bitmap;

	if (!dcMem.CreateCompatibleDC(&dcClient))
		return NULL;

	if (!Bitmap.CreateCompatibleBitmap(&dcClient, rectComplete.Width(), rectComplete.Height()))
		return NULL;

	CBitmap *pOldMemDCBitmap = dcMem.SelectObject(&Bitmap);
	// Use green as mask color
 	dcMem.FillSolidRect(0, 0, rectComplete.Width(), rectComplete.Height(), RGB(0,255,0));

	// Don't use antialiased font for the dragimages
	CFont *pFont = pTree->GetFont();
	LOGFONT lf;
	pFont->GetLogFont(&lf);
	lf.lfQuality = NONANTIALIASED_QUALITY;
	CFont newFont;
	newFont.CreateFontIndirect(&lf);

	CFont *oldFont = dcMem.SelectObject(&newFont);

	TCHAR buffer[1000];
	TVITEM tvItem = {0};
	tvItem.mask = TVIF_TEXT | TVIF_IMAGE;
	tvItem.hItem = hItem;
	tvItem.pszText = buffer;
	tvItem.cchTextMax = 999;

	pTree->GetItem(&tvItem);
	
	// Draw the icon
	CImageList* pSingleImageList = pTree->GetImageList(TVSIL_NORMAL);
	if (pSingleImageList)
	{
		CRect rectIcon;
		pTree->GetItemRect(hItem, rectIcon, true);

		IMAGEINFO info;
		pSingleImageList->GetImageInfo(tvItem.iImage, &info);
		CPoint p(rectIcon.left - rectComplete.left - (info.rcImage.right - info.rcImage.left) - 3, 
				rectIcon.top - rectComplete.top);
		pSingleImageList->Draw( &dcMem, tvItem.iImage, 
								p,
								ILD_TRANSPARENT);
	}

	// Draw the text
	CString text;
	text = tvItem.pszText;
	CRect textRect;
	pTree->GetItemRect(hItem, textRect, true);
	textRect.top -= rectComplete.top - 2;
	textRect.bottom -= rectComplete.top + 1;
	textRect.left -= rectComplete.left - 2;
	textRect.right -= rectComplete.left;
		
	DWORD flags = DT_END_ELLIPSIS | DT_MODIFYSTRING;
	dcMem.DrawText(text, -1, textRect, flags);
	
	dcMem.SelectObject(oldFont);

	dcMem.SelectObject(pOldMemDCBitmap);

	// Create drag image(list)
	CImageList* pCompleteImageList = new CImageList;
	pCompleteImageList->Create(rectComplete.Width(), rectComplete.Height(), ILC_COLOR32 | ILC_MASK, 0, 1);
	pCompleteImageList->Add(&Bitmap, RGB(0, 255, 0)); // Green is used as mask color
	Bitmap.DeleteObject();

	if (lpPoint)
	{
		lpPoint->x = rectComplete.left;
		lpPoint->y = rectComplete.top;
	}

	return pCompleteImageList;
}

void CMainFrame::OnBegindrag(CWnd *pDragWnd, CPoint point) 
{
	POINT pt = {0};
	if (pDragWnd == GetLocalPane2()->GetListCtrl() ||
		pDragWnd == GetFtpPane()->GetListCtrl())
	{
		if (reinterpret_cast<CListCtrl *>(pDragWnd)->GetSelectedCount() <= 0)
			return;  // No row selected
		m_pDragImage = CreateDragImageEx(reinterpret_cast<CListCtrl *>(pDragWnd), &pt);
	}
	else
	{
		if (!reinterpret_cast<CTreeCtrl *>(pDragWnd)->GetSelectedItem())
			return;	// No item selected
		m_pDragImage = CreateDragImageEx(reinterpret_cast<CTreeCtrl *>(pDragWnd), &pt);
	}

	if (m_pDragImage == NULL)
		return;

	m_pDragWnd = pDragWnd;
	CPoint ptStart = point;
	ptStart -= pt;
	m_pDragImage->BeginDrag(0, ptStart);
	CRect rect; 
	::GetWindowRect(pDragWnd->m_hWnd, &rect); 
	CPoint pt2 = point;
	pt2.Offset(rect.left+8, rect.top+8); 
	m_pDragImage->DragEnter(NULL, pt2); 
	SetCapture();
}

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

		if (m_pDragWnd == GetFtpTreePane()->GetTreeCtrl() &&
			pDropWnd != GetFtpTreePane()->GetTreeCtrl() &&
			pDropWnd != GetFtpPane()->GetListCtrl())
		{
			SetCursor(m_hcNo);
			reinterpret_cast<CFtpTreeCtrl *>(GetFtpTreePane()->GetTreeCtrl())->DragLeave(m_pDragImage);
			reinterpret_cast<CFtpListCtrl *>(GetFtpPane()->GetListCtrl())->DragLeave(m_pDragImage);
			reinterpret_cast<CDirTreeCtrl *>(GetLocalPane()->GetTreeCtrl())->DragLeave(m_pDragImage);
			reinterpret_cast<CLocalFileListCtrl *>(GetLocalPane2()->GetListCtrl())->DragLeave(m_pDragImage);
		}
		else if (pDropWnd == GetQueuePane()->GetListCtrl())
		{
			SetCursor(m_hcArrow);
			reinterpret_cast<CFtpTreeCtrl *>(GetFtpTreePane()->GetTreeCtrl())->DragLeave(m_pDragImage);
			reinterpret_cast<CFtpListCtrl *>(GetFtpPane()->GetListCtrl())->DragLeave(m_pDragImage);
			reinterpret_cast<CDirTreeCtrl *>(GetLocalPane()->GetTreeCtrl())->DragLeave(m_pDragImage);
			reinterpret_cast<CLocalFileListCtrl *>(GetLocalPane2()->GetListCtrl())->DragLeave(m_pDragImage);
		}
		else if (pDropWnd == GetLocalPane2()->GetListCtrl())
		{
			if (reinterpret_cast<CLocalFileListCtrl *>(GetLocalPane2()->GetListCtrl())->DragPosition(m_pDragImage, m_pDragWnd, ptDropPoint))
				SetCursor(m_hcArrow);
			else
				SetCursor(m_hcNo);
			reinterpret_cast<CFtpListCtrl *>(GetFtpPane()->GetListCtrl())->DragLeave(m_pDragImage);
			reinterpret_cast<CFtpTreeCtrl *>(GetFtpTreePane()->GetTreeCtrl())->DragLeave(m_pDragImage);
			reinterpret_cast<CDirTreeCtrl *>(GetLocalPane()->GetTreeCtrl())->DragLeave(m_pDragImage);
		}
		else if (pDropWnd == GetFtpPane()->GetListCtrl())
		{
			if (reinterpret_cast<CFtpListCtrl *>(GetFtpPane()->GetListCtrl())->DragPosition(m_pDragImage, m_pDragWnd, ptDropPoint))
				SetCursor(m_hcArrow);
			else
				SetCursor(m_hcNo);
			reinterpret_cast<CFtpTreeCtrl *>(GetFtpTreePane()->GetTreeCtrl())->DragLeave(m_pDragImage);
			reinterpret_cast<CDirTreeCtrl *>(GetLocalPane()->GetTreeCtrl())->DragLeave(m_pDragImage);
			reinterpret_cast<CLocalFileListCtrl *>(GetLocalPane2()->GetListCtrl())->DragLeave(m_pDragImage);
		}
		else if (pDropWnd == GetFtpTreePane()->GetTreeCtrl())
		{
			if (reinterpret_cast<CFtpTreeCtrl *>(GetFtpTreePane()->GetTreeCtrl())->DragPosition(m_pDragImage, m_pDragWnd, ptDropPoint))
				SetCursor(m_hcArrow);
			else
				SetCursor(m_hcNo);
			reinterpret_cast<CFtpListCtrl *>(GetFtpPane()->GetListCtrl())->DragLeave(m_pDragImage);
			reinterpret_cast<CDirTreeCtrl *>(GetLocalPane()->GetTreeCtrl())->DragLeave(m_pDragImage);
			reinterpret_cast<CLocalFileListCtrl *>(GetLocalPane2()->GetListCtrl())->DragLeave(m_pDragImage);
		}
		else if (pDropWnd == GetLocalPane()->GetTreeCtrl())
		{
			if (reinterpret_cast<CDirTreeCtrl *>(GetLocalPane()->GetTreeCtrl())->DragPosition(m_pDragImage, m_pDragWnd, ptDropPoint))
				SetCursor(m_hcArrow);
			else
				SetCursor(m_hcNo);
			reinterpret_cast<CFtpListCtrl *>(GetFtpPane()->GetListCtrl())->DragLeave(m_pDragImage);
			reinterpret_cast<CLocalFileListCtrl *>(GetLocalPane2()->GetListCtrl())->DragLeave(m_pDragImage);
			reinterpret_cast<CFtpTreeCtrl *>(GetFtpTreePane()->GetTreeCtrl())->DragLeave(m_pDragImage);
		}
		else
		{
			reinterpret_cast<CFtpListCtrl *>(GetFtpPane()->GetListCtrl())->DragLeave(m_pDragImage);
			reinterpret_cast<CFtpTreeCtrl *>(GetFtpTreePane()->GetTreeCtrl(

⌨️ 快捷键说明

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