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

📄 lookpage.cpp

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

#include "stdafx.h"
#include "made.h"
#include "LookPage.h"

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

/////////////////////////////////////////////////////////////////////////////
// CLookPage property page
UINT LookPro(LPVOID lpParam)
{
	CLookPage * p=(CLookPage *)lpParam;
	p->Find();
	p->KillTimer(IDD_LOOK);
	p->ShowControl();
	return 0;
}

IMPLEMENT_DYNCREATE(CLookPage, CPropertyPage)

CLookPage::CLookPage() : CPropertyPage(CLookPage::IDD)
{
	//{{AFX_DATA_INIT(CLookPage)
	m_Asc = _T("");
	m_AscF = _T("");
	m_Sit = _T("");
	m_Str = _T("");
	m_StrF = _T("");
	//}}AFX_DATA_INIT
	pfile=0;
	filelong=0;
}

CLookPage::~CLookPage()
{
}

void CLookPage::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLookPage)
	DDX_Control(pDX, IDC_LOOK_PROGRESS, m_Progress);
	DDX_Control(pDX, IDC_LOOK_SCROLLBAR, m_ScrollBar);
	DDX_Control(pDX, IDC_LOOK_FILE, m_File);
	DDX_Text(pDX, IDC_LOOK_ASC, m_Asc);
	DDX_Text(pDX, IDC_LOOK_ASCF, m_AscF);
	DDX_Text(pDX, IDC_LOOK_SIT, m_Sit);
	DDX_Text(pDX, IDC_LOOK_STR, m_Str);
	DDX_Text(pDX, IDC_LOOK_STRF, m_StrF);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLookPage, CPropertyPage)
	//{{AFX_MSG_MAP(CLookPage)
	ON_BN_CLICKED(IDC_LOOK, OnLook)
	ON_EN_CHANGE(IDC_LOOK_ASC, OnChangeLookAsc)
	ON_EN_CHANGE(IDC_LOOK_ASCF, OnChangeLookAscf)
	ON_EN_CHANGE(IDC_LOOK_FILE, OnChangeLookFile)
	ON_BN_CLICKED(IDC_LOOK_LOOK, OnLookLook)
	ON_BN_CLICKED(IDC_LOOK_SAVE, OnLookSave)
	ON_BN_CLICKED(IDC_LOOK_SHOW, OnLookShow)
	ON_EN_CHANGE(IDC_LOOK_SIT, OnChangeLookSit)
	ON_BN_CLICKED(IDC_LOOK_STOP, OnLookStop)
	ON_EN_CHANGE(IDC_LOOK_STR, OnChangeLookStr)
	ON_EN_CHANGE(IDC_LOOK_STRF, OnChangeLookStrf)
	ON_WM_VSCROLL()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLookPage message handlers

void CLookPage::OnLook() 
{
	// TODO: Add your control notification handler code here
	m_BreakFlag=0;
	ShowControl(0);
	AfxBeginThread(LookPro,this);
}

void CLookPage::OnChangeLookAsc() 
{
	UpdateData();
	m_Str.Empty();
	int start=0,end=0;int flag=0;
	CString temp;
	m_Asc+="\r\n";
	while(flag++<23)
	{
		end=m_Asc.Find(13,start);
		if(end==-1)break;
		temp.Format("%c",atoi(m_Asc.Mid(start,end-start)));
		m_Str+=temp;
		start=end+2;
	}
	m_Asc.Delete(m_Asc.GetLength()-2,2);
	UpdateData(0);	
}

void CLookPage::OnChangeLookAscf() 
{
	UpdateData();
	m_StrF.Empty();
	int start=0,end=0;int flag=0;
	CString temp;
	m_AscF+="\r\n";
	while(flag++<50)
	{
		end=m_AscF.Find(13,start);
		if(end==-1)break;
		temp.Format("%c",atoi(m_AscF.Mid(start,end-start)));
		m_StrF+=temp;
		start=end+2;
	}
	m_AscF.Delete(m_AscF.GetLength()-2,2);
	UpdateData(0);	
}

void CLookPage::OnChangeLookFile() 
{
	CString filename;
	m_File.GetWindowText(filename);
	if(filename.IsEmpty()||(pfile=fopen(filename,"rb"))==NULL)
	{
		pfile=0;
		filelong=0;
		return ;
	}
	filelong=filelength(pfile->_file);
	fclose(pfile);
	ShowControl(TRUE);
	Show(0);
}

void CLookPage::OnLookLook() 
{
	CFileDialog file(1);
	if(file.DoModal()==IDOK)
	{
		m_File.SetWindowText(file.GetPathName());
		ShowControl(TRUE);
		Show(0);
	}
}

void CLookPage::OnLookSave() 
{
	CString filename;
	m_File.GetWindowText(filename);
	if(filename.IsEmpty()||(pfile=fopen(filename,"r+b"))==NULL)
	{
		pfile=0;
		filelong=0;
		return ;
	}
	filelong=filelength(pfile->_file);
	if(MessageBox("此操作将要永久改变文件内容,是否继续?","修改文件",MB_YESNO|MB_ICONQUESTION)==IDYES)
	{
		char buf[22];
		int start=0,end=0;int flag=0;
		CString temp;
		m_Asc+="\r\n";
		while(flag++<23)
		{
			end=m_Asc.Find(13,start);
			if(end==-1)break;
			buf[flag-1]=atoi(m_Asc.Mid(start,end-start));
			start=end+2;
		}
		m_Asc.Delete(m_Asc.GetLength()-2,2);
		fseek(pfile,atol(m_Sit),0);
		fwrite(buf,22,1,pfile);
		rewind(pfile);
	}
	fclose(pfile);
}

void CLookPage::OnLookShow() 
{
	Show(atol(m_Sit));
	
}

void CLookPage::OnChangeLookSit() 
{
	CString temp=m_Sit;
	UpdateData();
	if(atol(m_Sit)>filelong-22)
	{
		m_Sit=temp;
		UpdateData(0);
	}
	long sit=atol(m_Sit);
	Show(sit);
	if(filelong>NUM*NUM)
		m_ScrollInfo.nPos=sit/(filelong/NUM);
	else
		m_ScrollInfo.nPos=sit*NUM/filelong;
	m_ScrollBar.SetScrollInfo(&m_ScrollInfo);
	m_Progress.SetPos(m_ScrollInfo.nPos);
}

void CLookPage::OnLookStop() 
{
	// TODO: Add your control notification handler code here
	m_BreakFlag=1;
}

void CLookPage::OnChangeLookStr() 
{
	UpdateData();
	m_Asc.Empty();
	char buf[22];
	strcpy(buf,m_Str);
	OnFullStr(buf,m_Asc);
	UpdateData(0);
}

void CLookPage::OnChangeLookStrf() 
{
	UpdateData();
	m_AscF.Empty();
	CString temp;
	for(int n=m_StrF.GetLength()-1;n>=0;n--)
	{
		temp.Format("%d\r\n",m_StrF.GetAt(n));
		m_AscF=temp+m_AscF;
	}
	UpdateData(0);	
}

BOOL CLookPage::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_Progress.SetRange(0,NUM);
	m_ScrollBar.SetScrollRange(0,NUM);
	m_ScrollBar.GetScrollInfo(&m_ScrollInfo);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CLookPage::Show(long sit)
{
	CString filename;
	m_File.GetWindowText(filename);
	if(filename.IsEmpty()||(pfile=fopen(filename,"rb"))==NULL)
	{
		MessageBox("指定的文件不存在","打开文件失败",MB_ICONERROR);
		return FALSE;
	}
	filelong=filelength(pfile->_file);
	if(sit>filelong-22)
		sit=filelong-22;
	fseek(pfile,sit,0);
	char buf[22];
	fread(buf,1,22,pfile);
	rewind(pfile);
	fclose(pfile);
	OnFullStr(buf,m_Str,1);
	OnFullStr(buf,m_Asc);
	UpdateData(0);
	return TRUE;
}

void CLookPage::OnFullStr(char *p, CString &rString, int Flag,int Count)
{
	rString.Empty();
	CString temp;
	if(Flag==0)//ASCII
	{
		for(int i=0;i<Count;i++)
		{
			temp.Format("%d\r\n",*(p+i));
			rString+=temp;
		}
		rString.Delete(rString.GetLength()-2,2);
	}
	else
	{
		for(int i=0;i<Count;i++)
		{
			temp.Format("%c",p[i]);
			rString+=temp;
		}
	}
}

void CLookPage::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	
	if(pScrollBar->GetDlgCtrlID()==IDC_LOOK_SCROLLBAR)
	{
		long sit=atol(m_Sit);
		switch(nSBCode)
		{
		case SB_LINELEFT:
			if(sit>0)
			{
				sit=sit-1;
				if(filelong>NUM*NUM)
					m_ScrollInfo.nPos=sit/(filelong/NUM);
				else
					m_ScrollInfo.nPos=sit*NUM/filelong;
			}
			break;
		case SB_LINERIGHT:
			if(sit<filelong-22)
			{
				sit=sit+1;
				if(filelong>NUM*NUM)
					m_ScrollInfo.nPos=sit/(filelong/NUM);
				else
					m_ScrollInfo.nPos=sit*NUM/filelong;
			}
				break;
		case SB_PAGELEFT:
			if(sit>22)
			{
				sit=sit-22;
				if(filelong>NUM*NUM)
					m_ScrollInfo.nPos=sit/(filelong/NUM);
				else
					m_ScrollInfo.nPos=sit*NUM/filelong;
			}
				break;
		case SB_PAGERIGHT:
			if(sit<filelong-44)
			{
				sit=sit+22;
				if(filelong>NUM*NUM)
					m_ScrollInfo.nPos=sit/(filelong/NUM);
				else
					m_ScrollInfo.nPos=sit*NUM/filelong;
			}
				break;
		case SB_THUMBTRACK:
			m_ScrollInfo.nPos=nPos;
			m_ScrollBar.SetScrollInfo(&m_ScrollInfo);
			sit=(long)(((double)(nPos)/NUM)*(filelong-22));
			break;
		}
		m_ScrollBar.SetScrollInfo(&m_ScrollInfo);
		m_Sit.Format("%ld",sit);
		m_Progress.SetPos(m_ScrollInfo.nPos);
		UpdateData(0);
		Show(sit);
		m_Sit.Format("%ld",sit);
	}
	CPropertyPage::OnVScroll(nSBCode, nPos, pScrollBar);
}

void CLookPage::Find()
{
	CString filename;
	m_File.GetWindowText(filename);
	if(filename.IsEmpty()||(pfile=fopen(filename,"rb"))==NULL)
	{
		MessageBox(filename+"\n文件打不开","打开文件失败",MB_ICONERROR);
		return;
	}
	int start=0,end=0;int flag=0;
	char buf[50];
	m_AscF+="\r\n";
	while(flag<50)
	{
		end=m_AscF.Find(13,start);
		if(end==-1)break;
		buf[flag]=atoi(m_AscF.Mid(start,end-start));
		start=end+2;
		flag++;
	}
	m_AscF.Delete(m_AscF.GetLength()-2,2);
	if(atol(m_Sit)>filelong-flag)return;
	fseek(pfile,atol(m_Sit)+1,0);
	SetTimer(IDD_LOOK,500,NULL);
	while(DoFind(buf,flag-1,pfile)==0)
	{
//		if(feof(pfile))
		if(ftell(pfile)>filelong-flag)
		{
			fclose(pfile);
			MessageBox("该段未发现待搜字符串","未发现",MB_ICONEXCLAMATION);
			return;
		}
		if(m_BreakFlag)
		{
			fclose(pfile);
			return;
		}
	}
	long sit=ftell(pfile)-flag+1;
	if(sit>filelong-22)
	{
		KillTimer(IDD_LOOK);
		MessageBox("该段未发现待搜字符串","未发现",MB_ICONEXCLAMATION);
		fclose(pfile);
		return;
	}
	rewind(pfile);
	m_ScrollInfo.nPos=sit*NUM/filelong;
	m_ScrollBar.SetScrollInfo(&m_ScrollInfo);
	m_Progress.SetPos(m_ScrollInfo.nPos);
	m_Sit.Format("%ld",sit);
//	UpdateData(0);
	m_File.GetWindowText(filename);
	fseek(pfile,sit,0);
	buf[22];
	fread(buf,22,1,pfile);
//	OnFullStr(buf,m_Str,1);
	OnFullStr(buf,m_Asc);
	UpdateData(0);
	fclose(pfile);
}

BOOL CLookPage::DoFind(char *pstr, int count, FILE *file)
{
	if(count==0)
		return TRUE;
	char c;
	fread(&c,1,1,file);
	if(c!=*pstr)
	{
		return FALSE;
	}
	else
	{
		if(DoFind(pstr+1,count-1,file))
			return TRUE;
		else
		{
			fseek(file,-1,1);
			return FALSE;
		}
	}
}

void CLookPage::ShowControl(BOOL flag)
{
	GetDlgItem(IDC_LOOK)->EnableWindow(flag);
	GetDlgItem(IDC_LOOK_ASC)->EnableWindow(flag);
	GetDlgItem(IDC_LOOK_ASCF)->EnableWindow(flag);
	GetDlgItem(IDC_LOOK_FILE)->EnableWindow(flag);
	GetDlgItem(IDC_LOOK_LOOK)->EnableWindow(flag);
	GetDlgItem(IDC_LOOK_SAVE)->EnableWindow(flag);
	GetDlgItem(IDC_LOOK_SCROLLBAR)->EnableWindow(flag);
	GetDlgItem(IDC_LOOK_SHOW)->EnableWindow(flag);
	GetDlgItem(IDC_LOOK_SIT)->EnableWindow(flag);
	GetDlgItem(IDC_LOOK_STOP)->EnableWindow(!flag);
	GetDlgItem(IDC_LOOK_STR)->EnableWindow(flag);
	GetDlgItem(IDC_LOOK_STRF)->EnableWindow(flag);
}

void CLookPage::OnTimer(UINT nIDEvent) 
{
	long sit=ftell(pfile);
	if(filelong>NUM*NUM)
		m_Progress.SetPos(sit/(filelong/NUM));
	else
		m_Progress.SetPos(sit*NUM/filelong);

	CPropertyPage::OnTimer(nIDEvent);
}

⌨️ 快捷键说明

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