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

📄 webdiskwnd.cpp

📁 网络硬盘的客户段,网络硬盘的客户段网络硬盘的客户段网络硬盘的客户段
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// WebDiskWnd.cpp : 实现文件
//

#include "stdafx.h"
#include "WD070129.h"
#include "WebDiskWnd.h"
#include "DirDialog.h"

#include <sys/types.h>
#include <sys/stat.h>

//为使用_com_util::ConvertBSTRToString函数所加的头文件,
//还要将"项目"->"属性"->"配置属性"->"C/C++"->"语言"->"将wchar_t视为内置类型"改为"否"
#include <comutil.h>
#pragma comment (lib, "comsupp.lib")
// CWebDiskWnd

struct DownloadFileInfo
{
	CString strFileName;
	__int64 nFileSize;
	CWebDiskWnd *pWnd;
}g_pDFI;

UINT DownloadFile(LPVOID p);


struct UploadFileInfo
{
	CString strFilePath;
	CWebDiskWnd* pWnd;
	HTREEITEM TreeInfo;
}g_pUFI;
UINT UploadFile(LPVOID p);

IMPLEMENT_DYNAMIC(CWebDiskWnd, CWnd)

CWebDiskWnd::CWebDiskWnd()
{
	m_pService = NULL;
	// 装入菜单 
	m_menu.LoadMenu(IDR_MENU_CONTEXT);
	m_pdtcFile = new CDropTreeCtrl(&m_FileList, &m_menu);
	m_pImageList = new CImageList; 
	m_bstrTicket = ::SysAllocString(NULL);
 
}

CWebDiskWnd::~CWebDiskWnd()
{
}


BEGIN_MESSAGE_MAP(CWebDiskWnd, CWnd)
	ON_BN_CLICKED(IDC_BUTTON_REG, &CWebDiskWnd::OnBnClickedButtonRegister)
	ON_BN_CLICKED(IDC_BUTTON_LOGIN, &CWebDiskWnd::OnBnClickedButtonLogin)
	ON_BN_CLICKED(IDC_BUTTON_LOGOUT, &CWebDiskWnd::OnBnClickedButtonLogout)
	ON_NOTIFY(NM_DBLCLK, IDC_TREE_CTRL_FILE, OnDblclkTreeTest)
	ON_WM_DESTROY()
	ON_MESSAGE(WM_UPLOADFILE, &CWebDiskWnd::OnFileUpload)
	ON_MESSAGE(WM_DOWNLOADFILE, &CWebDiskWnd::OnFileDownload)
	ON_MESSAGE(WM_DELETEFILE, &CWebDiskWnd::OnFileDelete)

	ON_WM_PAINT()
END_MESSAGE_MAP()



// CWebDiskWnd 消息处理程序
BOOL CWebDiskWnd::Create(DWORD dwStyle, CRect &rect, CWnd *pParent, UINT id)
{
	BOOL result ;
	result = CWnd::CreateEx(WS_EX_STATICEDGE , 
                      NULL, NULL, dwStyle, 
                      rect.left, rect.top, rect.Width(), rect.Height(),
                      pParent->GetSafeHwnd(), (HMENU)id) ;

	InitFont();
	InitCtrl();

	return result;
}

void CWebDiskWnd::InitFont(void)
{
	m_ftCtrl.CreateFont(
		12,                        // nHeight
		0,                         // nWidth
		0,                         // nEscapement
		0,                         // nOrientation
		FW_NORMAL,                 // nWeight
		FALSE,                     // bItalic
		FALSE,                     // bUnderline
		0,                         // cStrikeOut
		ANSI_CHARSET,              // nCharSet
		OUT_DEFAULT_PRECIS,        // nOutPrecision
		CLIP_DEFAULT_PRECIS,       // nClipPrecision
		DEFAULT_QUALITY,           // nQuality
		DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
		_T("新宋体"));             // lpszFacename
}

void CWebDiskWnd::InitCtrl(void)
{
	CRect rc;

	if(m_gbLogin.GetSafeHwnd() != NULL)
	{
		m_gbLogin.DestroyWindow();
	}
	rc.left		=	10;
	rc.top		=	10;
	rc.right	=	150;
	rc.bottom	=	120;
	m_gbLogin.Create(_T("登陆"), WS_CHILD|WS_VISIBLE|BS_GROUPBOX, rc, this, IDC_BUTTON_GROUPBOX_LOGIN); 
	m_gbLogin.SetFont(&	m_ftCtrl);

	if(m_stUser.GetSafeHwnd() != NULL)
	{
		m_stUser.DestroyWindow();
	}
	rc.left		=	20;
	rc.top		=	35;
	rc.right	=	60;
	rc.bottom	=	55;
//	m_stUser.Create(_T("用户名"), WS_CHILD|WS_VISIBLE|SS_LEFT, rc, this, IDC_STATIC_USER); 
//	m_stUser.SetFont(&	m_ftCtrl);

	if(m_edUser.GetSafeHwnd() != NULL)
	{
		m_edUser.DestroyWindow();
	}
	rc.left		=	65;
	rc.top		=	30;
	rc.right	=	140;
	rc.bottom	=	50;
	m_edUser.Create(WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, rc, this, IDC_EDIT_USER); 
	m_edUser.SetFont(&	m_ftCtrl);
//-------------
	m_edUser.SetWindowText(_T("tiger"));
//-------------

	if(m_stPassword.GetSafeHwnd() != NULL)
	{
		m_stPassword.DestroyWindow();
	}
	rc.left		=	20;
	rc.top		=	65;
	rc.right	=	60;
	rc.bottom	=	85;
//	m_stPassword.Create(_T("密  码"), WS_CHILD|WS_VISIBLE|SS_LEFT, rc, this, IDC_STATIC_PASSWORD); 
//	m_stPassword.SetFont(&	m_ftCtrl);

	if(m_edPassword.GetSafeHwnd() != NULL)
	{
		m_edPassword.DestroyWindow();
	}
	rc.left		=	65;
	rc.top		=	60;
	rc.right	=	140;
	rc.bottom	=	80;
	m_edPassword.Create(WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER|ES_PASSWORD, rc, this, IDC_EDIT_PASSWORD); 
	m_edPassword.SetFont(&	m_ftCtrl);
//-------------
	m_edPassword.SetWindowText(_T("147258"));
//-------------

	if(m_btLogin.GetSafeHwnd() != NULL)
	{
		m_btLogin.DestroyWindow();
	}
	rc.left		=	20;
	rc.top		=	90;
	rc.right	=	55;
	rc.bottom	=	110;
	m_btLogin.Create(_T("登陆"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, rc, this, IDC_BUTTON_LOGIN); 
	m_btLogin.SetFont(&	m_ftCtrl);

	if(m_btLogout.GetSafeHwnd() != NULL)
	{
		m_btLogin.DestroyWindow();
	}
	rc.left		=	60;
	rc.top		=	90;
	rc.right	=	95;
	rc.bottom	=	110;
	m_btLogout.Create(_T("退出"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, rc, this, IDC_BUTTON_LOGOUT); 
	m_btLogout.SetFont(&	m_ftCtrl);

	if(m_btRegister.GetSafeHwnd() != NULL)
	{
		m_btRegister.DestroyWindow();
	}
	rc.left		=	100;
	rc.top		=	90;
	rc.right	=	135;
	rc.bottom	=	110;
	m_btRegister.Create(_T("注册"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, rc, this, IDC_BUTTON_REG); 
	m_btRegister.SetFont(&	m_ftCtrl);	
	
	if(m_pdtcFile->GetSafeHwnd() != NULL)
	{
		m_pdtcFile->DestroyWindow();
	}
	rc.left		=	10;
	rc.top		=	130;
	rc.right	=	150;
	rc.bottom	=	280;
	m_pdtcFile->Create(WS_VISIBLE | WS_TABSTOP | WS_CHILD | WS_BORDER | TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES
   | TVS_DISABLEDRAGDROP  ,rc, this, IDC_TREE_CTRL_FILE); 
//	m_pdtcFile->SetFont(&m_ftCtrl);
	m_pdtcFile->DragAcceptFiles();
	//载入图标
	m_pImageList->Create(16,16,ILC_MASK| ILC_COLOR16,8,1); 
	m_pImageList->SetBkColor (RGB(255,255,255));

	HICON icon[2];
	icon[0]=AfxGetApp()->LoadIcon (IDI_ICON1); 
	icon[1]=AfxGetApp()->LoadIcon (IDI_ICON2);
	for(int n=0;n<2;n++)
	{
		m_pImageList->Add(icon[n]);  //把图标载入图像列表控件
	}
	m_pdtcFile->SetImageList(m_pImageList,TVSIL_NORMAL);


	if(m_pgcTest.GetSafeHwnd() != NULL)
	{
		m_pgcTest.DestroyWindow();
	}
	rc.left		=	10;
	rc.top		=	290;
	rc.right	=	150;
	rc.bottom	=	300;
	m_pgcTest.Create(WS_VISIBLE| WS_CHILD  ,rc, this, IDC_PROGRESS_TEST); 


}

void CWebDiskWnd::OnBnClickedButtonRegister(void)
{
	RegisterUser();
}

void CWebDiskWnd::RegisterUser(void)
{
	if(	m_pService != NULL)
	{
		delete m_pService;
		m_pService = NULL;
	}

	m_pService = new CService;

	char* str;

	CString strUser;
	m_edUser.GetWindowText(strUser);

	CString strPassword;
	m_edPassword.GetWindowText(strPassword);


	BSTR bstrUser = ::SysAllocString(NULL);
	BSTR bstrPassword = ::SysAllocString(NULL);
	bstrUser = strUser.AllocSysString();
	bstrPassword = strPassword.AllocSysString();

	int flag = true;

	m_pService->Register(bstrUser, bstrPassword, &flag);

	if(flag == 1)
	{
		::AfxMessageBox(_T("用户名有冲突!请重新注册!"));
	}

	SysFreeString(bstrUser);
	SysFreeString(bstrPassword);

	RetrieveFileList();	

}

void CWebDiskWnd::OnBnClickedButtonLogin()
{
	// TODO: 在此添加控件通知处理程序代码
	StartService();
}

void CWebDiskWnd::StartService(void)
{
	if(	m_pService != NULL)
	{
		delete m_pService;
		m_pService = NULL;
	}

	m_pService = new CService;

	char* str;

	CString strUser;
	m_edUser.GetWindowText(strUser);

	CString strPassword;
	m_edPassword.GetWindowText(strPassword);


	BSTR bstrUser = ::SysAllocString(NULL);
	BSTR bstrPassword = ::SysAllocString(NULL);
	bstrUser = strUser.AllocSysString();
	bstrPassword = strPassword.AllocSysString();

	m_pService->GetAuthorizationTicket(bstrUser, bstrPassword, &m_bstrTicket);

	SysFreeString(bstrUser);
	SysFreeString(bstrPassword);


	//创建共享文件夹
	CString strTemp;
	strTemp.Format("\\共享文件夹");
	BSTR bstrShareF;
	bstrShareF= strTemp.AllocSysString();;
	BSTR bstrRet = ::SysAllocString(NULL);

	m_pService->CreateFolder(m_bstrTicket, bstrShareF, &bstrRet);

	SysFreeString(bstrShareF);
	SysFreeString(bstrRet);

	RetrieveFileList();

}

void CWebDiskWnd::OnBnClickedButtonLogout()
{
	// TODO: 在此添加控件通知处理程序代码
//	RegisterUser();
	StoptService();

}

void CWebDiskWnd::OnDestroy()
{
	StoptService();
	CWnd::OnDestroy();

	// TODO: 在此处添加消息处理程序代码
}

void CWebDiskWnd::StoptService(void)
{
	if(	m_pService != NULL)
	{
		delete m_pService;
		m_pService = NULL;
	}
}

void CWebDiskWnd::RetrieveFileList(HTREEITEM root)
{
	BSTR bstrTest = ::SysAllocString(NULL);

	CString strRootPath, strTemp = _T("");

//	m_pdtcFile->DeleteItem(root);

	HTREEITEM parent;
	parent = root;
	while(1)
	{
		strTemp = m_pdtcFile->GetItemText(parent);
		strRootPath = _T("\\") + strTemp + strRootPath;;
		parent = m_pdtcFile->GetParentItem(parent);
		if(parent == NULL)
			break;
	}

	BSTR bstrRootPth = ::SysAllocString(NULL);
	bstrRootPth = strRootPath.AllocSysString();

	m_pService->GetFile(m_bstrTicket, bstrRootPth, &bstrTest);

	SysFreeString(bstrRootPth);

	CString strFileNameBunch;
	strFileNameBunch = _com_util::ConvertBSTRToString(bstrTest);

	HTREEITEM ChildItem;
	while(1)
	{
		ChildItem = m_pdtcFile->GetChildItem(root);
		if(ChildItem == NULL)
			break;
		
		m_pdtcFile->DeleteItem(ChildItem);
	}
	//strFileNameBunch(文件名串如下排列,中间用'|'分隔
    //strFileNameBunch = "123.111|asd.ttt|";

	int strLen = strFileNameBunch.GetLength();
	CString strFileName;
	
	int i, j;

	for(i=0; i<strLen;)
	{
		j = strFileNameBunch.Find('|', i);
		strFileName = strFileNameBunch.Mid(i, j-i);
		if((strFileName.Left(1)).Compare(_T("@")) == 0)
		{
	
			CString str = strFileName.Mid(1);
			if(str.Compare("共享文件夹") != 0)
			{
				HTREEITEM ChildItem1;
				ChildItem1 = m_pdtcFile->InsertItem(_T(str), 0, 0, root);
				RetrieveFileList(ChildItem1);
			}
			else
			{
				HTREEITEM ChildItem1;
				ChildItem1 = m_pdtcFile->InsertItem(_T(str), 0, 0, root);
				RetrieveShareFileList(ChildItem1);
			}
		}
		else
		{
			m_pdtcFile->InsertItem(_T(strFileName), 1, 1, root);
		}

		i=j+1;

	}


	m_pdtcFile->Expand(root, TVE_EXPAND);

}


HTREEITEM FindChildItem(CDropTreeCtrl *ptcTest, HTREEITEM root, CString strCur)
{
	if (ptcTest->ItemHasChildren(root))
	{
		HTREEITEM hNextItem;
		HTREEITEM hChildItem = ptcTest->GetChildItem(root);
		CString str = ptcTest->GetItemText(hChildItem);
		if(str.Compare(strCur) == 0)
		{
			return hChildItem;
		}

		while (hChildItem != NULL)
		{
			hNextItem = ptcTest->GetNextItem(hChildItem, TVGN_NEXT);
			str = ptcTest->GetItemText(hChildItem);
			if(str.Compare(strCur) == 0)
			{
				return hChildItem;
			}
			hChildItem = hNextItem;
		}
	}
	return NULL;
}

void CWebDiskWnd::RetrieveShareFileList(HTREEITEM root)
{
	BSTR bstrTest = ::SysAllocString(NULL);
	CString strRootPath, strTemp = _T("");

//	m_pdtcFile->DeleteItem(root);

	HTREEITEM parent;
	parent = root;
	while(1)
	{
		strTemp = m_pdtcFile->GetItemText(parent);
		strRootPath = _T("\\") + strTemp + strRootPath;;
		parent = m_pdtcFile->GetParentItem(parent);
		if(parent == NULL)
			break;
	}

	strRootPath.Replace("\\共享文件夹\\", "");
	strRootPath.Replace("\\共享文件夹", "");

	BSTR bstrRootPth = ::SysAllocString(NULL);

//	""
//	"lyt"
//	"lyt\@aaa"
//	"lyt\@aaa\@新建文件夹"
//	"lyt\@aaa\@新建文件夹\@999"


	CString strUserShareName;
	strUserShareName = strRootPath;

	int index = strRootPath.Find('\\');
	index = strRootPath.Find('\\', index+1);

	if(index > 0)
	{
		strUserShareName = strRootPath.Left(index+1);
	}
	strRootPath.Replace(strUserShareName, "");
	strRootPath.Replace("@", "");


	strUserShareName.Replace("\\@", "|");
	strUserShareName.Replace("\\", "|");





	bstrRootPth = strRootPath.AllocSysString();	


	BSTR bstrUserShareName = strUserShareName.AllocSysString();



	m_pService->ShowShare(m_bstrTicket, bstrUserShareName, bstrRootPth, &bstrTest);

	::SysFreeString(bstrUserShareName);

	CString strFileNameBunch;
	strFileNameBunch = _com_util::ConvertBSTRToString(bstrTest);

	HTREEITEM ChildItem;
	while(1)
	{
		ChildItem = m_pdtcFile->GetChildItem(root);
		if(ChildItem == NULL)
			break;

⌨️ 快捷键说明

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