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

📄 fileacess.cpp

📁 单片机对FLASH芯片的烧写,源程序,原理图,PCB图
💻 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 + -