📄 linkpage.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 + -