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

📄 filesharedlg.cpp

📁 类似于QQ的聊天工具,分为客户端和服务器端,有共享空间,能发布公告,可传输文件
💻 CPP
字号:
// FileShareDlg.cpp : implementation file
//

#include "stdafx.h"
#include "NetQQ.h"
#include "FileShareDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CFileShareDlg dialog


CFileShareDlg::CFileShareDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CFileShareDlg::IDD, pParent)
{
	m_pMainDlg    = (CMainDlg*)pParent;
	m_bPersonal   = false;
	m_bChangeUser = false;
	//{{AFX_DATA_INIT(CFileShareDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CFileShareDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFileShareDlg)
	DDX_Control(pDX, IDC_FILELIST, m_lstFileShare);
	DDX_Control(pDX, IDC_PROGRESS, m_FileProgress);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CFileShareDlg, CDialog)
	//{{AFX_MSG_MAP(CFileShareDlg)
	ON_BN_CLICKED(IDC_UPLOAD, OnUpload)
	ON_BN_CLICKED(IDC_DOWNLOAD, OnDownload)
	ON_WM_CLOSE()
	ON_BN_CLICKED(IDC_BTN_FILESHAREBRUSH, OnBtnFilesharebrush)
	ON_WM_DESTROY()
	ON_WM_LBUTTONDOWN()
	ON_WM_PAINT()
	ON_BN_CLICKED(IDC_BUT_MIN3, OnButMin)
	ON_BN_CLICKED(IDC_BUT_CLOSE3, OnCloseWin)
	ON_WM_MOUSEMOVE()
	ON_BN_CLICKED(IDC_BTN_F, OnBtnF)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_FILESHARE, OnFileShare)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFileShareDlg message handlers

void CFileShareDlg::OnUpload() 
{
	// TODO: Add your control notification handler code here
	DWORD exitCode = 0;
	HANDLE handle  = m_ftManage.GetLoadThreadHandle();
    GetExitCodeThread(handle,&exitCode);
    if(exitCode == STILL_ACTIVE)
	{
		//MessageBox("RUN");
		CString msg = "有文件正在传输, 请稍后...";
		GetDlgItem(IDC_STC0)->SetWindowText(msg);
		return;
	}
	m_ftManage.SetPersonalStatus(m_bPersonal);
	CString strUserId = m_pMainDlg->m_pLoadDlg->m_strUserId;
	DWORD   dwIp      = m_pMainDlg->m_pLoadDlg->m_dwIp;
	m_ftManage.UpLoadFile(this, strUserId, dwIp);
}

void CFileShareDlg::OnDownload() 
{
	// TODO: Add your control notification handler code here
	DWORD exitCode = 0;
	HANDLE handle  = m_ftManage.GetLoadThreadHandle();
    GetExitCodeThread(handle,&exitCode);
    if(exitCode == STILL_ACTIVE)
	{
		//MessageBox("RUN");
		CString msg = "有文件正在传输, 请稍后...";
		GetDlgItem(IDC_STC0)->SetWindowText(msg);
		return;
	}

	POSITION pos = m_lstFileShare.GetFirstSelectedItemPosition();
	int nIndex   = m_lstFileShare.GetNextSelectedItem(pos);
	if(-1 == nIndex)
	{
		CString msg = "没有选择目标文件";
		GetDlgItem(IDC_STC0)->SetWindowText(msg);
		return;
	}
	CString strFileInfo[3];
	strFileInfo[0] = m_lstFileShare.GetItemText(nIndex, 0);
	strFileInfo[1] = m_lstFileShare.GetItemText(nIndex, 1);
	strFileInfo[2] = m_lstFileShare.GetItemText(nIndex, 2);

	DWORD dwIp = m_pMainDlg->m_pLoadDlg->m_dwIp;
	m_ftManage.SetPersonalStatus(m_bPersonal);
	m_ftManage.DownLoadFile(this, strFileInfo, dwIp);
}

void CFileShareDlg::OnOK()
{
}
void CFileShareDlg::OnCancel()
{
}

void CFileShareDlg::OnClose() 
{
	// TODO: Add your message handler code here and/or call default

	DWORD exitCode = 0;
	HANDLE handle  = m_ftManage.GetLoadThreadHandle();
    GetExitCodeThread(handle,&exitCode);
    if(exitCode == STILL_ACTIVE)
	{
		//MessageBox("RUN");
		int ret;
		CString msg = "文件正在传输,关闭将终止文件传输,确定关闭吗?";
		if(m_bChangeUser)//注销关闭
		{
			ret = IDOK;
		}
		else//正常关闭
		{
			ret	= MessageBox(msg, "系统警告", MB_OKCANCEL | MB_ICONWARNING);
		}

		if(ret == IDOK)
		{
			_LoadThreadParam* pTmp = m_ftManage.GetLoadThreadParam();
			TerminateThread(handle, exitCode);
			Sleep(5);
			if(!pTmp)
			{
				closesocket(pTmp->m_sUploadFile);
				pTmp->m_pFile->Close();
				delete pTmp;
			}
			CloseHandle(handle);
		}
		else
		{
			return;
		}
	}
	
	CloseHandle(handle);
	if(m_bPersonal)
	{
		m_pMainDlg->m_hPsPlaceWnd   = NULL;
	}
	else
	{
		m_pMainDlg->m_hFileShareWnd = NULL;
	}
	OnDestroy();
}

void CFileShareDlg::OnFileShare(WPARAM wParam, LPARAM lParam)
{
	//////////////////////////
	//通知窗体是注销退出
	if(lParam == 1999)
	{
		m_bChangeUser = true;
		return;
	}
	
	//////////////////////////////////////////
	//文件信息接收
	CString strBuf = (char*)wParam;
	CMsgBag mbTool;
	long retFlat = mbTool.GetRetStatus(strBuf);

	if(retFlat == 0)
	{
		if(m_bPersonal)
		{
			GetDlgItem(IDC_STC0)->SetWindowText("您没有个人存储记录");
		}
		else
		{
			GetDlgItem(IDC_STC0)->SetWindowText("无共享记录");
		}
		
	}
	else if(retFlat == 2)
	{
		GetDlgItem(IDC_STC0)->SetWindowText("查询出错,请稍后再试!");
	}
	 else if(retFlat == 1)
	 {
		CString strFileIf[5];
		mbTool.SplitDate(strBuf, strFileIf);

		int nIndex = m_lstFileShare.GetItemCount();
		m_lstFileShare.InsertItem(nIndex, strFileIf[0]);
		for(int i = 1; i < 5; i++)
		{
			m_lstFileShare.SetItemText(nIndex, i, strFileIf[i]);
		}
		int nCount = m_lstFileShare.GetItemCount();
		CString strFileCount;
		if(m_bPersonal)
		{
			strFileCount.Format("您有%d条个人存储记录", nCount);
		}
		else
		{
			strFileCount.Format("共%d条共享记录", nCount);
		}
		GetDlgItem(IDC_STC0)->SetWindowText(strFileCount);
	 }
	
	delete[] (char*)wParam;
}

BOOL CFileShareDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	/////////////////////////////////////////////////////////////////////////
	//初始化列表控件
	m_lstFileShare.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
	m_lstFileShare.SetBkColor(RGB(223, 235, 255));
	m_lstFileShare.SetTextBkColor(RGB(223, 235, 255));
	m_lstFileShare.SetTextColor(RGB(32, 24, 14));
	
	m_lstFileShare.InsertColumn(0, "文件ID", LVCFMT_LEFT, 50, 0);
	m_lstFileShare.InsertColumn(1, "文件名", LVCFMT_LEFT, 130, 1);
	m_lstFileShare.InsertColumn(2, "文件大小", LVCFMT_LEFT, 62, 2);
	m_lstFileShare.InsertColumn(3, "拥有者", LVCFMT_LEFT, 67, 3);
	m_lstFileShare.InsertColumn(4, "上传时间", LVCFMT_LEFT, 126, 4);
	// TODO: Add extra initialization here

	m_myButtonMin.AutoLoad(IDC_BUT_MIN3,this);
	m_myButtonClose.AutoLoad(IDC_BUT_CLOSE3,this);

	m_myButtonUp.AutoLoad(IDC_UPLOAD,this);
	m_myButtonDown.AutoLoad(IDC_DOWNLOAD,this);
	m_myButtonRef.AutoLoad(IDC_BTN_FILESHAREBRUSH,this);	

	m_ttToolTip.CreateToolTip(this);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CFileShareDlg::OnBtnFilesharebrush() 
{
	// TODO: Add your control notification handler code here
	Filesharebrush();
}


void CFileShareDlg::Filesharebrush()
{
	m_lstFileShare.DeleteAllItems();
	m_ftManage.SetPersonalStatus(m_bPersonal);
	CMsgBag mbTool;
	tagPacketParam pp;
	CString strBuf;
	if(m_bPersonal)
	{
		pp.order = "1014";
	}
	else
	{
		pp.order = "1009";
	}
	pp.paramNum = 0;
	mbTool.DataPackage(strBuf, &pp);
	(m_pMainDlg->m_pLoadDlg->GetCClntSock()).OnSend(strBuf);
}

void CFileShareDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here
	delete this;
}

void CFileShareDlg::SetPersonalStatus(bool bStatus)
{
	m_bPersonal = bStatus;
}


void CFileShareDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));			
	CDialog::OnLButtonDown(nFlags, point);
}

void CFileShareDlg::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	// TODO: Add your message handler code here
	CRgn  m_rgn;
	CRect rcWnd;
	GetWindowRect(rcWnd);
	m_rgn.m_hObject = CreateRoundRectRgn(0,0,rcWnd.Width(), rcWnd.Height(),20, 20 );
	this->SetWindowRgn(m_rgn,true);	
	
	// Do not call CDialog::OnPaint() for painting messages
}


void CFileShareDlg::OnButMin() 
{
	// TODO: Add your control notification handler code here
	PostMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0);	
}

void CFileShareDlg::OnCloseWin() 
{
	// TODO: Add your control notification handler code here
	OnClose();
}
BOOL CFileShareDlg::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	if(m_ttToolTip.GetToolTip().m_hWnd)
		m_ttToolTip.GetToolTip().RelayEvent(pMsg);
	return CDialog::PreTranslateMessage(pMsg);
	return CDialog::PreTranslateMessage(pMsg);
}

void CFileShareDlg::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	m_ttToolTip.AddToolTip("关闭窗口", GetDlgItem(IDC_BUT_CLOSE3));
	m_ttToolTip.AddToolTip("上传", GetDlgItem(IDC_UPLOAD));
	m_ttToolTip.AddToolTip("下载", GetDlgItem(IDC_DOWNLOAD));
	m_ttToolTip.AddToolTip("刷新", GetDlgItem(IDC_BTN_FILESHAREBRUSH));
	m_ttToolTip.AddToolTip("最小化窗口", GetDlgItem(IDC_BUT_MIN3));
	CDialog::OnMouseMove(nFlags, point);
}

void CFileShareDlg::OnBtnF() 
{
	// TODO: Add your control notification handler code here
	CWnd* pWnd = GetFocus();
	if(pWnd == GetDlgItem(IDC_UPLOAD))
	{
		OnUpload();
	}
	else if(pWnd == GetDlgItem(IDC_DOWNLOAD))
	{
		OnDownload();
	}
	else
	{
		Filesharebrush();
	}
}

⌨️ 快捷键说明

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