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