📄 clientdlg.cpp
字号:
// ClientDlg.cpp : implementation file
//
#include "stdafx.h"
#include "FileShare.h"
#include "ClientDlg.h"
#include "ThreadProc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CStatusBarCtrl g_StatusBar;
/////////////////////////////////////////////////////////////////////////////
// CClientDlg dialog
CClientDlg::CClientDlg(CWnd* pParent /*=NULL*/)
: CDialog(CClientDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CClientDlg)
m_strFileName = _T("");
m_nPort = 488;
m_strAddr = _T("");
m_strMessage = _T("");
m_nTime = 0;
//}}AFX_DATA_INIT
this->m_nLastSend=0;
this->m_nTotalSend=0;
}
void CClientDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CClientDlg)
DDX_Text(pDX, IDC_FILENAME, m_strFileName);
DDX_Text(pDX, IDC_PORT, m_nPort);
DDX_Text(pDX, IDC_SERVERADDRESS, m_strAddr);
DDX_Text(pDX, IDC_MESSAGE, m_strMessage);
DDX_Text(pDX, IDC_EDIT_TIMEV, m_nTime);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CClientDlg, CDialog)
//{{AFX_MSG_MAP(CClientDlg)
ON_WM_LBUTTONDBLCLK()
ON_WM_SIZE()
ON_BN_CLICKED(IDC_SEND, OnSend)
ON_MESSAGE(WM_THREADMSG,OnThreadMsg)
ON_WM_TIMER()
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_BROWSE_FILE, OnBrowseFile)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CClientDlg message handlers
void CClientDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
{
AfxMessageBox("dsfsdf");
// CDialog::OnLButtonDblClk(nFlags, point);
}
void CClientDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
HWND h;
h=::GetDlgItem(this->GetSafeHwnd(),IDC_MESSAGE);
::SetWindowPos(h,NULL,0,140,cx,cy-140,0);
}
void CClientDlg::OnSend()
{
UpdateData(true);
char addr[512];
CString strFileName,strTmp;
struct sockaddr_in sock_addr;
DWORD ip;
SERVICEPARM *p;
int nIndex;
strcpy(addr,(char*)(LPCTSTR)this->m_strAddr);
if(GetAddr(addr,&ip))
{
AfxMessageBox("无法解析主机地址!");
return;
}
sock_addr.sin_family=AF_INET;
sock_addr.sin_port=htons(this->m_nPort);
sock_addr.sin_addr.S_un.S_addr = htonl(ip);
strTmp = this->m_strFileName;
nIndex=strTmp.Find("\r\n",0);
if(nIndex==-1)
{
strFileName=strTmp;
}
else
{
strFileName=strTmp.Left(nIndex);
strTmp = strTmp.Right(strTmp.GetLength()-nIndex-2);
}
while(strFileName.GetLength())
{
p=(SERVICEPARM*)malloc(sizeof(SERVICEPARM));
p->sockservice = socket(AF_INET,SOCK_STREAM,0);
if(connect(p->sockservice,(sockaddr*)&sock_addr,sizeof(sock_addr)))
{
free(p);
AfxMessageBox("无法连接到主机!");
return;
}
strcpy(p->path,strFileName.GetBuffer(1));
p->hwndServerDlg=this->GetSafeHwnd();
p->nTime = m_nTime;
if(AfxBeginThread(SendDataProc,p)==NULL)
{
AfxMessageBox("创建线程失败!");
return;
}
else
{
GetDlgItem(IDC_SEND)->EnableWindow(false);
}
nIndex=strTmp.Find("\r\n",0);
if(nIndex==-1)
{
strFileName="";
}
else
{
strFileName=strTmp.Left(nIndex);
strTmp = strTmp.Right(strTmp.GetLength()-nIndex-2);
}
}
}
BOOL CClientDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
char sz[256];
GetPrivateProfileString(FILESHARE,SERVERADDR,"",sz,sizeof(sz),CONFIG_FILE);
this->m_strAddr=sz;
GetPrivateProfileString(FILESHARE,SERVERPORT,"",sz,sizeof(sz),CONFIG_FILE);
this->m_nPort = atoi(sz);
GetPrivateProfileString(FILESHARE,FILENAME,"",sz,sizeof(sz),CONFIG_FILE);
this->m_strFileName=sz;
UpdateData(false);
this->SetTimer(SEND_SPEED_TIMER,TIMER_LONG,NULL);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CClientDlg::OnThreadMsg(WPARAM wParm,LPARAM lParm)
{
UpdateData(true);
char msg[1024];
switch(wParm)
{
case MSG_THREADEXIT:
GetDlgItem(IDC_SEND)->EnableWindow(true);
break;
case MSG_SHOWMSG:
strcpy(msg,(char*)lParm);
this->m_strMessage+=msg;
UpdateData(false);
break;
case MSG_STATUSBAR_MSG:
strcpy(msg,(char*)lParm);
this->GetParent()->SetWindowText(msg);
break;
case MSG_SEND_DATA:
this->m_nLastSend += (DWORD)lParm;
break;
default:
break;
}
}
void CClientDlg::OnTimer(UINT nIDEvent)
{
DWORD nSpeed;
char msg[512];
static char s1[3];
static char s2[3];
float n1,n2;
switch(nIDEvent)
{
case SEND_SPEED_TIMER:
{
nSpeed = this->m_nLastSend/(TIMER_LONG/1000);
this->m_nTotalSend += this->m_nLastSend;
if(m_nTotalSend/MB)
{
s1[0]='M';
s1[1]='B';
n1=(float)m_nTotalSend/MB;
}
else if(m_nTotalSend/KB)
{
s1[0]='K';
s1[1]='B';
n1=(float)m_nTotalSend/KB;
}
else
{
s1[0]='B';
s1[1]=0;
n1=(float)m_nTotalSend;
}
if(nSpeed/MB)
{
s2[0]='M';
s2[1]='B';
n2=(float)nSpeed/MB;
}
else if(nSpeed/KB)
{
s2[0]='K';
s2[1]='B';
n2=(float)nSpeed/KB;
}
else
{
s2[0]='B';
s2[1]=0;
n2=(float)nSpeed;
}
sprintf(msg,"发送:%0.3f%s 速度:%0.3f%sps",n1,s1,n2,s2);
this->m_nLastSend = 0;
g_StatusBar.SetText(msg,1,NULL);
}
break;
default:
CDialog::OnTimer(nIDEvent);
break;
}
}
CClientDlg::~CClientDlg()
{
}
void CClientDlg::OnDestroy()
{
UpdateData(TRUE);
char sz[32];
WritePrivateProfileString(FILESHARE,SERVERADDR,(LPCTSTR)this->m_strAddr,CONFIG_FILE);
sprintf(sz,"%d",this->m_nPort);
WritePrivateProfileString(FILESHARE,SERVERPORT,sz,CONFIG_FILE);
WritePrivateProfileString(FILESHARE,FILENAME,(LPCTSTR)this->m_strFileName,CONFIG_FILE);
CDialog::OnDestroy();
// TODO: Add your message handler code here
}
void CClientDlg::OnBrowseFile()
{
UpdateData(true);
OPENFILENAME OpenFileName;
char szFileName[1024]={0};
char dir[256];
char file[256];
int nIndex;
memset(&OpenFileName,0,sizeof(OpenFileName));
OpenFileName.lStructSize = sizeof(OPENFILENAME);
OpenFileName.hwndOwner = this->GetSafeHwnd();
OpenFileName.hInstance = AfxGetInstanceHandle();
OpenFileName.lpstrFilter = "所有文件(*.*)\0*.*\0\0";
OpenFileName.lpstrFile = szFileName;
OpenFileName.nMaxFile = sizeof (szFileName);
OpenFileName.lpstrFileTitle = "";
OpenFileName.nMaxFileTitle = 0;
OpenFileName.lpstrInitialDir = NULL;
OpenFileName.lpstrTitle = "选择发送文件";
OpenFileName.Flags = OFN_NOCHANGEDIR|
OFN_EXPLORER|
OFN_ALLOWMULTISELECT;
//OpenFileName.Flags =0;
OpenFileName.nFileOffset = 0;
OpenFileName.nFileExtension = 1;
OpenFileName.lpstrDefExt =NULL;
if(::GetOpenFileName(&OpenFileName))
{
this->m_strFileName="";
nIndex=0;
strcpy(dir,szFileName);
if(dir[strlen(dir)-1]!='\\')
{
strcat(dir,"\\");
nIndex=strlen(dir);
}
else
{
nIndex=strlen(dir)+1;
}
if(strlen(&szFileName[nIndex])>0)
{
while(strlen(&szFileName[nIndex])>0)
{
sprintf(file,"%s%s\r\n",dir,&szFileName[nIndex]);
this->m_strFileName += file;
nIndex += strlen(&szFileName[nIndex])+1;
}
}
else
{
m_strFileName=szFileName;
}
UpdateData(false);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -