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

📄 linkpage.cpp

📁 对文件进行处理。 包括文件复制、分割、连接、查看等。
💻 CPP
字号:
// LinkPage.cpp : implementation file
//

#include "stdafx.h"
#include "Made.h"
#include "LinkPage.h"

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

/////////////////////////////////////////////////////////////////////////////
// CLinkPage property page
UINT LinkPro(LPVOID lpParam)
{
	CLinkPage * p=(CLinkPage *)lpParam;
	p->Link();
	p->GetDlgItem(IDC_LINK_OUTFILE)->EnableWindow(1);
	p->GetDlgItem(IDC_LINK_LOOK)->EnableWindow(1);
	p->GetDlgItem(IDC_LINK_LOOK_DIR)->EnableWindow(1);
	p->GetDlgItem(IDC_LINK_LIST)->EnableWindow(1);
	p->GetDlgItem(IDC_LINK)->EnableWindow(1);
	p->GetDlgItem(IDC_LINK_STOP)->EnableWindow(0);
	fcloseall();
	p->m_Progress.SetPos(0);
	return 1;
}
IMPLEMENT_DYNCREATE(CLinkPage, CPropertyPage)

CLinkPage::CLinkPage() : CPropertyPage(CLinkPage::IDD)
{
	//{{AFX_DATA_INIT(CLinkPage)
	//}}AFX_DATA_INIT
}

CLinkPage::~CLinkPage()
{
}

void CLinkPage::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLinkPage)
	DDX_Control(pDX, IDC_PROGRESS, m_Progress);
	DDX_Control(pDX, IDC_LINK_LIST, m_List);
	DDX_Control(pDX, IDC_LINK_OUTFILE, m_Outfile);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLinkPage, CPropertyPage)
	//{{AFX_MSG_MAP(CLinkPage)
	ON_BN_CLICKED(IDC_LINK, OnLink)
	ON_BN_CLICKED(IDC_LINK_DEL, OnLinkDel)
	ON_BN_CLICKED(IDC_LINK_LOOK, OnLinkLook)
	ON_BN_CLICKED(IDC_LINK_LOOK_DIR, OnLinkLookDir)
	ON_BN_CLICKED(IDC_LINK_STOP, OnLinkStop)
	ON_LBN_SELCHANGE(IDC_LINK_LIST, OnSelchangeLinkList)
	ON_BN_CLICKED(IDC_LINK_UP, OnLinkUp)
	ON_BN_CLICKED(IDC_LINK_DOWN, OnLinkDown)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_LINK_SORT, OnLinkSort)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLinkPage message handlers

void CLinkPage::OnLink() 
{
	GetDlgItem(IDC_LINK_LOOK)->EnableWindow(0);
	GetDlgItem(IDC_LINK_LOOK_DIR)->EnableWindow(0);
	GetDlgItem(IDC_LINK_OUTFILE)->EnableWindow(0);
	GetDlgItem(IDC_LINK_LIST)->EnableWindow(0);
	GetDlgItem(IDC_LINK)->EnableWindow(0);
	GetDlgItem(IDC_LINK_DEL)->EnableWindow(0);
	GetDlgItem(IDC_LINK_STOP)->EnableWindow(1);
	m_BreakFlag=0;
	AfxBeginThread(LinkPro,this);
}


void CLinkPage::OnLinkDel() 
{
	int sel=-1;
	for(int nIndex=m_List.GetCount()-1;nIndex>=0;nIndex--)
	{
		sel=m_List.GetSel(nIndex);
		if(sel>0)
		m_List.DeleteString(nIndex);
	}
		GetDlgItem(IDC_LINK_DEL)->EnableWindow(0);
		GetDlgItem(IDC_LINK_UP)->EnableWindow(0);
		GetDlgItem(IDC_LINK_DOWN)->EnableWindow(0);
}

void CLinkPage::OnLinkLook() 
{
	CFileDialog file(1);
	if(file.DoModal()==IDOK)
	{
		CString temp,filename;
		if(m_List.GetCount())
			m_List.GetText(m_List.GetCount()-1,temp);
		filename=file.GetPathName();
		if(temp.CompareNoCase(filename))
			m_List.AddString(filename);
		else
			if(MessageBox(temp+"需要再加一次吗?","提问",MB_OKCANCEL|MB_ICONQUESTION)==IDOK)
				m_List.AddString(filename);
		int nIndex=m_List.GetCurSel();
		if(nIndex==-1)
		{
			GetDlgItem(IDC_LINK_UP)->EnableWindow(0);
			GetDlgItem(IDC_LINK_DOWN)->EnableWindow(0);
		}
		else
		{
			if(nIndex==0)
				GetDlgItem(IDC_LINK_UP)->EnableWindow(0);
			else
				GetDlgItem(IDC_LINK_UP)->EnableWindow(1);
			if(nIndex==m_List.GetCount()-1)
				GetDlgItem(IDC_LINK_DOWN)->EnableWindow(0);
			else
				GetDlgItem(IDC_LINK_DOWN)->EnableWindow(1);
		}
	}
}

void CLinkPage::OnLinkLookDir() 
{
	CFileDialog file(0);
	if(file.DoModal()==IDOK)
		m_Outfile.SetWindowText(file.GetPathName());
}

void CLinkPage::OnLinkStop() 
{
	m_BreakFlag=1;
	fcloseall();
}

int CLinkPage::Link()
{
	CString str,target;
	m_Outfile.GetWindowText(target);
	if(target.IsEmpty()||m_List.GetCount()==0)
		return 0;
	FILE * tfile;
	if((tfile=fopen(target,"rb")))
	{
		fclose(tfile);
		int flag=MessageBox(target+"\n该文件已经存在,确实要覆盖此文件吗?","覆盖文件",MB_YESNOCANCEL|MB_ICONQUESTION|MB_DEFBUTTON3);
		switch(flag)
		{
		case IDCANCEL:
			return 0;
			break;
		case IDYES:
			if((tfile=fopen(target,"wb"))==NULL)
			{
				MessageBox(target+"\n不能建立该文件,请检查文件是否只读","未知原因",MB_ICONERROR);
				return 0;
			}
			break;
		case IDNO:
			if((tfile=fopen(target,"ab"))==NULL)
			{
				MessageBox(target+"\n不能建立该文件,请检查文件是否只读","未知原因",MB_ICONERROR);
				return 0;
			}
			break;
		default:
			fcloseall();
		}
	}
	else
	{
		if((tfile=fopen(target,"wb"))==NULL)
		{
			MessageBox(target+"\n不能建立该文件,请检查文件是否只读","未知原因",MB_ICONERROR);
			return 0;
		}
	}
	SetTimer(IDD_LINK,500,NULL);
	m_Progress.SetRange(0,1000);
	DWORD filelong;
	for(int i=0;i<m_List.GetCount();i++)
	{
		m_List.SetCurSel(i);
		m_List.GetText(i,str);
		if((pfile=fopen(str,"rb"))==NULL)
		{
			KillTimer(IDD_LINK);
			fcloseall();
			MessageBox(str+"\n无法读取该文件,请检查该文件是否存在","读文件失败",MB_ICONERROR);
			return 0;
		}
		filelong=filelength(pfile->_file);
		char buf[NUM];
		for(int b=0;b<(int)(filelong/NUM);b++)
		{
			if(m_BreakFlag)
			{
				KillTimer(IDD_LINK);
				return 0;
			}
			fread(buf,NUM,1,pfile);
			fwrite(buf,NUM,1,tfile);
		}
		if(m_BreakFlag)
		{
			KillTimer(IDD_LINK);
			return 0;
		}
		fread(buf,filelong-b*NUM,1,pfile);
		fwrite(buf,filelong-b*NUM,1,tfile);
	}
	KillTimer(IDD_LINK);
	return 1; 
}

void CLinkPage::OnSelchangeLinkList() 
{
	// TODO: Add your control notification handler code here
	GetDlgItem(IDC_LINK_DEL)->EnableWindow(1);
	int count=m_List.GetSelCount();
	if(count==1)
	{
		int nIndex=m_List.GetCurSel();
		GetDlgItem(IDC_LINK_DEL)->EnableWindow(1);
		if(nIndex==0)
			GetDlgItem(IDC_LINK_UP)->EnableWindow(0);
		else
			GetDlgItem(IDC_LINK_UP)->EnableWindow(1);
		if(nIndex==m_List.GetCount()-1)
			GetDlgItem(IDC_LINK_DOWN)->EnableWindow(0);
		else
			GetDlgItem(IDC_LINK_DOWN)->EnableWindow(1);
	}
	else
	{
		GetDlgItem(IDC_LINK_UP)->EnableWindow(0);
		GetDlgItem(IDC_LINK_DOWN)->EnableWindow(0);
	}
}

void CLinkPage::OnLinkUp() 
{
	CString str;
	int nIndex=m_List.GetCurSel();
	m_List.GetText(nIndex,str);
	m_List.DeleteString(nIndex);
	m_List.InsertString(nIndex-1,str);
	m_List.SetSel(nIndex-1);
		GetDlgItem(IDC_LINK_DEL)->EnableWindow(1);
		if(nIndex==1)
			GetDlgItem(IDC_LINK_UP)->EnableWindow(0);
		else
			GetDlgItem(IDC_LINK_UP)->EnableWindow(1);
	GetDlgItem(IDC_LINK_DOWN)->EnableWindow(1);
}

void CLinkPage::OnLinkDown() 
{
	CString str;
	int nIndex=m_List.GetCurSel();
	m_List.GetText(nIndex,str);
	m_List.DeleteString(nIndex);
	m_List.InsertString(nIndex+1,str);
	m_List.SetSel(nIndex+1);
		GetDlgItem(IDC_LINK_DEL)->EnableWindow(1);
		if(nIndex==m_List.GetCount()-2)
			GetDlgItem(IDC_LINK_DOWN)->EnableWindow(0);
		else
			GetDlgItem(IDC_LINK_DOWN)->EnableWindow(1);
	GetDlgItem(IDC_LINK_UP)->EnableWindow(1);
}

void CLinkPage::OnTimer(UINT nIDEvent) 
{
	DWORD flong=filelength(pfile->_file);
	if(flong>1000)
		m_Progress.SetPos(ftell(pfile)/(flong/1000));
	else
		m_Progress.SetPos(ftell(pfile)*1000/flong);
	CPropertyPage::OnTimer(nIDEvent);
}

void CLinkPage::OnLinkSort() 
{
	int count=m_List.GetCount();
	if(count<2)return;
	int select=m_List.GetCurSel();
	CString str1,str2;
	for(int i=1;i<count;i++)
		for(int j=0;j<i;j++)
		{
			m_List.GetText(i,str1);
			m_List.GetText(j,str2);
			if(str1.CompareNoCase(str2)<0)
			{
				if(select==i)select=j;
				else if(select==j)select=i;
				m_List.DeleteString(i);
				m_List.InsertString(i,str2);
				m_List.DeleteString(j);
				m_List.InsertString(j,str1);
			}
		}
	if(select>-1)
		m_List.SetSel(select);
}

⌨️ 快捷键说明

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