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

📄 sortlistctrl.cpp

📁 一个不错的远程控制软件源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:


//void CSortListCtrl::OnBegindrag(NMHDR* pNMHDR, LRESULT* pResult) 
//{
//	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
//	// TODO: Add your control notification handler code here
//	//确信要拖动,而不是随便点击
//	//按下左键250ms则认为要拖动
//	Sleep(250);
//	MSG msg;
//	::PeekMessage(
//		&msg,
//		GetSafeHwnd(),
//		WM_LBUTTONUP,
//		WM_LBUTTONUP,
//		PM_NOREMOVE
//		);
//	//随意点击而已,返回
//	if( msg.message==WM_LBUTTONUP )
//		return;
//
//	DWORD Contens;
//	Contens=(DWORD)this;
//	HGLOBAL hData = GlobalAlloc(GHND|GMEM_SHARE,sizeof(DWORD) );
//	char *pS = (char *)GlobalLock( hData );
//	memcpy( pS, (char*)&Contens,sizeof(DWORD));
//	GlobalUnlock( hData );
//
//	m_bDraging = TRUE;	//开始拖动
//	COleDataSource source;
//	source.CacheGlobalData( RegisterClipboardFormat("ListCtrl")/*CF_TEXT*/, hData );
//	source.DoDragDrop( DROPEFFECT_COPY );
//	GlobalFree( hData );
//	m_bDraging = FALSE;	//完成拖动
//	*pResult = 0;
//}
DROPEFFECT CSortListCtrl::OnDragOver(WPARAM pDropInfoClass, LPARAM lParm)
{
	COleDropInfo* pInfo = (COleDropInfo* )pDropInfoClass;
	ASSERT(pInfo->IsKindOf(RUNTIME_CLASS(COleDropInfo)));

	if( pInfo->m_pDataObject->IsDataAvailable(RegisterClipboardFormat("ListCtrl")) )
		return DROPEFFECT_COPY;
	else
		return DROPEFFECT_NONE;
}

DROPEFFECT CSortListCtrl::OnDropEx(WPARAM pDropInfoClass, LPARAM lParm)
{
	return (DROPEFFECT)-1;
}

BOOL CSortListCtrl::OnDrop(WPARAM pDropInfoClass, LPARAM lParm)
{
	if(MessageBox( "确定要拷贝吗?","提示",MB_YESNO)!=IDYES)
		return false;
	COleDropInfo* pInfo = (COleDropInfo* )pDropInfoClass;
	ASSERT(pInfo->IsKindOf(RUNTIME_CLASS(COleDropInfo)));

	if( pInfo->m_pDataObject->IsDataAvailable(RegisterClipboardFormat("ListCtrl")) )
	{
		HGLOBAL hMem = pInfo->m_pDataObject->GetGlobalData(RegisterClipboardFormat("ListCtrl"));
		char* lp = (char *)GlobalLock((HGLOBAL) hMem);//lock source
		if (lp != NULL)
		{
			AfxGetApp()->DoWaitCursor(1);
			//Set Windows title with Drop text 
			CString Mess;
			DRAG mydrag=*(DRAG*)lp;
			WSAEVENT hEvent=WSACreateEvent();
			if(hEvent==WSA_INVALID_EVENT)
			{
				Message(Mess.GetBuffer(Mess.GetLength()),"失败");
				AfxGetApp()->DoWaitCursor(0);
				return false;
			}
			SOCKET s;
			if(!PeerCreateSocket(&s,PEER_STREAM))
			{
				Mess="创建套接字";
				Message(Mess.GetBuffer(Mess.GetLength()),"失败");
				WSACloseEvent(hEvent);
				AfxGetApp()->DoWaitCursor(0);
				return false;
			}
			if(!PeerConnectSocket(s,ADDRESS,7788))
			{
				Mess="连接主机:";
				Mess+=ADDRESS;
				Message(Mess.GetBuffer(Mess.GetLength()),"失败");
				WSACloseEvent(hEvent);
				closesocket(s);
				AfxGetApp()->DoWaitCursor(0);
				return false;
			}
			CString filename;
			CString attrib;
			if(mydrag.flag==0)
			{
				CPeerFileListView*lv=(CPeerFileListView*)mydrag.wnd;
				if(&lv->list!=this)
				{
					///本地到远程
					memset(&com,0,sizeof(com));
					com.CommandID=PEER_FILE_SAVEFILE;
					if(!PeerSendDataS(s,(char*)&com,sizeof(com),&ret,hEvent))
					{
						Mess="发送UpLoad文件/文件夹命令";
						Message(Mess.GetBuffer(Mess.GetLength()),"失败");
						AfxGetApp()->DoWaitCursor(0);
						return false;
					}
					POSITION pos = lv->list.GetFirstSelectedItemPosition();
				    while (pos)
					{
					  int nItem = lv->list.GetNextSelectedItem(pos);
					  filename=lv->list.GetItemText(nItem,0);
					  attrib=lv->list.GetItemText(nItem,1);
					  if(filename=="." || filename=="..")
						  continue;
					  if(attrib=="文件夹")
					  {
						  Mess="尚未提供文件夹操作功能";//"上传文件夹:\""+lv->path+"\\"+filename+"\"";
						  if(!SendDir(s,hEvent,lv->path,filename))
							  Message(Mess.GetBuffer(Mess.GetLength()),"失败");
						  else
							  Message(Mess.GetBuffer(Mess.GetLength()),"成功");
						  MessageBox("尚未提供文件夹操作功能");
					  }
					  else
					  {
						  Mess="上传文件:\""+lv->path+"\\"+filename+"\"";
						  if(!SendFile(s,hEvent,lv->path,filename))
							  Message(Mess.GetBuffer(Mess.GetLength()),"失败");
						  else
							  Message(Mess.GetBuffer(Mess.GetLength()),"成功");
					  }
					}
					CPeerFileRemoteListView* lrv=(CPeerFileRemoteListView*)GetParent();
					lrv->Retrive();
				}
			}
			else
			{
				CPeerFileRemoteListView*rv=(CPeerFileRemoteListView*)mydrag.wnd;
				if(&rv->list!=this)
				{
					///远程到本地
					memset(&com,0,sizeof(com));
					com.CommandID=PEER_FILE_SENDFILE;
					if(!PeerSendDataS(s,(char*)&com,sizeof(com),&ret,hEvent))
					{
						Mess="发送DownLoad文件/文件夹命令";
						Message(Mess.GetBuffer(Mess.GetLength()),"失败");
						AfxGetApp()->DoWaitCursor(0);
						return false;
					}
					POSITION pos = rv->list.GetFirstSelectedItemPosition();
				    while (pos)
					{
					  int nItem = rv->list.GetNextSelectedItem(pos);
					  filename=rv->list.GetItemText(nItem,0);
					  attrib=rv->list.GetItemText(nItem,1);
					  if(filename=="." || filename=="..")
						  continue;
					  if(attrib=="文件夹")
					  {
						  Mess="尚未提供文件夹操作功能";//"下载文件夹:\""+rv->path+"\\"+filename+"\"";
						  if(!RecvDir(s,hEvent,rv->path,filename))
							  Message(Mess.GetBuffer(Mess.GetLength()),"失败");
						  else
							  Message(Mess.GetBuffer(Mess.GetLength()),"成功");
						  MessageBox("尚未提供文件夹操作功能");
					  }
					  else
					  {
						  Mess="下载文件:\""+rv->path+"\\"+filename+"\"";
						  if(!RecvFile(s,hEvent,rv->path,filename))
							  Message(Mess.GetBuffer(Mess.GetLength()),"失败");
						  else
							  Message(Mess.GetBuffer(Mess.GetLength()),"成功");
					  }
					}
					CPeerFileListView* rlv=(CPeerFileListView*)GetParent();
					rlv->Retrive();
				}
				
			}
			WSACloseEvent(hEvent);
			closesocket(s);
			AfxGetApp()->DoWaitCursor(0);
		}
		GlobalUnlock( hMem );//unlock source
		return TRUE;
	}
	else
		return FALSE;
}

bool CSortListCtrl::SendFile(SOCKET s, WSAEVENT hEvent,CString path,CString filename)
{
	CPeerFileRemoteListView*rv=(CPeerFileRemoteListView*)GetParent();
	char buf[4096];
	CString thispath=path+"\\"+filename;
	CString thatpath=rv->path+"\\"+filename;
	FILEINFO fi;
	FILE *fp;
	if(!(fp=fopen(thispath,"rb")))
		return false;
	strcpy(fi.filename,thatpath);
	if(fseek(fp,0l,SEEK_END))
	{
		fclose(fp);
		return false;
	}
	if((fi.filesize=ftell(fp))==-1)
	{
		fclose(fp);
		return false;
	}
	if(fseek(fp,0l,SEEK_SET))
	{
		fclose(fp);
		return false;
	}
	//////////////////////////////////////////////////////
	if(!PeerSendDataS(s,(char*)&fi,sizeof(fi),&ret,hEvent))
	{
		fclose(fp);
		return false;
	}
	DWORD fcount;
	while((fcount=fread(buf,sizeof(char),4096,fp)))
	{
		if(!PeerSendDataS(s,buf,fcount,&ret,hEvent)||ret!=fcount)
		{
			fclose(fp);
			return false;
		}
	}
	fclose(fp);
	////////////////////////////
	return true;
}

bool CSortListCtrl::RecvFile(SOCKET s, WSAEVENT hEvent,CString path,CString filename)
{
	CPeerFileRemoteListView*rv=(CPeerFileRemoteListView*)GetParent();
	CString thispath=path+"\\"+filename;
	CString thatpath=rv->path+"\\"+filename;
	char buf[4096];
	DWORD retLen;
	FILEINFO fi;
	strcpy(fi.filename,thispath);
	if(!PeerSendDataS(s,(char*)&fi,sizeof(fi),&retLen,hEvent))
	{
		return false;
	}
	if(!PeerRecvDataS(s,(char*)&fi,sizeof(fi),&retLen,
						 hEvent)||retLen!=sizeof(fi))
						 return false;
	FILE *fp;
	if(!(fp=fopen(thatpath,"wb+")))
		return false;
	DWORD dwGetSize=0;
	while(dwGetSize<fi.filesize)
	{
		if(fi.filesize-dwGetSize>4096)
		{
			if(!PeerRecvDataS(s,buf,4096,&retLen,
						 hEvent))
			{
				fclose(fp);
				DeleteFile(fi.filename);
				return false;
			}
			else
				if(fwrite(buf,sizeof(char),4096,fp)!=4096)
				{
					fclose(fp);
					DeleteFile(fi.filename);
					return false;
				}
				else
					dwGetSize+=4096;
		}
		else
		{
			if(!PeerRecvDataS(s,buf,fi.filesize-dwGetSize,&retLen,
						 hEvent))
			{
				fclose(fp);
				DeleteFile(fi.filename);
				return false;
			}
			else
				if(fwrite(buf,sizeof(char),fi.filesize-dwGetSize,fp)!=fi.filesize-dwGetSize)
				{
					fclose(fp);
					DeleteFile(fi.filename);
					return false;
				}
				else
					dwGetSize+=fi.filesize-dwGetSize;
		}
	}
	fclose(fp);
	return true;
}

bool CSortListCtrl::SendDir(SOCKET s, WSAEVENT hEvent,CString path,CString filename)
{
	return true;

}

bool CSortListCtrl::RecvDir(SOCKET s, WSAEVENT hEvent,CString path,CString filename)
{
	return true;

}

⌨️ 快捷键说明

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