📄 fileacess.cpp
字号:
// FileAcess.cpp : implementation file
//
#include "stdafx.h"
#include "prgx.h"
#include "FileAcess.h"
#include "Prg0.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CFileAcess dialog
CFileAcess::CFileAcess(CWnd* pParent /*=NULL*/)
: CDialog(CFileAcess::IDD, pParent)
{
//{{AFX_DATA_INIT(CFileAcess)
m_Title = _T("请输入要打开的文件名:");
m_FileName = _T("d:\\z3.bin");
//}}AFX_DATA_INIT
}
void CFileAcess::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFileAcess)
DDX_Control(pDX, IDC_FILENAME, m_CntlFN);
DDX_Text(pDX, IDC_STATIC4, m_Title);
DDX_Text(pDX, IDC_FILENAME, m_FileName);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFileAcess, CDialog)
//{{AFX_MSG_MAP(CFileAcess)
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFileAcess message handlers
BOOL CFileAcess::OnInitDialog()
{
CDialog::OnInitDialog();
// char s[100];
if(flag==2)
{m_Title=_T("请输入缓冲区地址,如果地址为16进制,请以0x开头:");
SetWindowText("文件缓冲区定位");
m_FileName=_T("");
}
SetTimer(12222,1,NULL);
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CFileAcess::OnOK()
{
DWORD lenH;
HANDLE hd;
char *ptr=0;
// s=(CStatic*)GetDlgItem(IDC_STATIC);
UpdateData();
char x[100];
int j;
if(flag==1)
{if(m_FileName.GetLength()>=FILENAMELEN)
{AfxMessageBox("文件名长度错误!!\n\n请确认所输入的文件名的长度<=30。");
return;
}
hd=CreateFile((LPCTSTR)m_FileName,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hd!=INVALID_HANDLE_VALUE)
{FileLen=GetFileSize(hd,&lenH);
CloseHandle(hd);
if(!FileLen || FileLen>=MAXFILELEN)
{AfxMessageBox("文件长度错误!!\n\n请确认所输入的文件的长度是否为零/或者大于5M。");
return;
}
}
else
{AfxMessageBox("打开文件错误!!\n\n请确认所输入的文件是否存在。");
// m_FileName=_T("");
m_CntlFN.SetFocus();
UpdateData(FALSE);
return;
}
CloseHandle(hd);
}
else if(flag==2)
{lenH=m_FileName.GetLength();
if(!lenH)
{AfxMessageBox("\n没有输入地址!");
return;
}
strcpy(x,(LPCTSTR)m_FileName);
int p=m_FileName.Find("0x");
if(p==-1)p=m_FileName.Find("0X");
if(p==-1) //十进制
{for(j=0;j<(int)lenH;j++)
{if(!isdigit(x[j]))
{AfxMessageBox("输入的地址中有非数字字符!(如果地址为16进制,请以0x开头)");
return;
}
}
FileLen=atoi(x);
sprintf(x,"\n请确认输入的地址:%d(10进制),0X%X(16进制)",FileLen,FileLen);
}
else //16进制
{FileLen=0;
// strcpy(x,(LPCTSTR)m_FileName);
DWORD y=0,tmp=0;
for(j=lenH-1;j>1;j--)
{ tmp=0;
if(isdigit(x[j])) tmp+=(x[j]-'0'); //每一字段的字符是否为x数字
else if(islower(x[j]) && x[j]>='a' && x[j]<='f') tmp+=(x[j]-'a'+10);
else if(isupper(x[j]) && x[j]>='A' && x[j]<='F') tmp+=(x[j]-'A'+10);
else {AfxMessageBox("输入的地址中有非16进制字符!"); return;};
FileLen+=(DWORD)(tmp*pow(16,y));
y++;
}
sprintf(x,"\n请确认输入的地址:%d(10进制),0X%X(16进制)",FileLen,FileLen);
}
if(AfxMessageBox(x,MB_OKCANCEL)==IDCANCEL){CDialog::OnCancel();return;}
}
CDialog::OnOK();
}
void CFileAcess::OnTimer(UINT nIDEvent)
{
KillTimer(nIDEvent);
CDialog::OnTimer(nIDEvent);
m_CntlFN.SetFocus();
m_CntlFN.EnableWindow();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -