?? webdiskwnd.cpp
字號:
?
+
// 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 + -