📄 rwset.cpp
字号:
// RWset.cpp : implementation file
//
#include "stdafx.h"
#include "prgx.h"
#include "RWset.h"
#include "math.h"
#include "Prg0.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRWset dialog
CRWset::CRWset(CWnd* pParent /*=NULL*/)
: CDialog(CRWset::IDD, pParent)
{
//{{AFX_DATA_INIT(CRWset)
m_AddrB0 = _T("");
m_AddrB1 = _T("");
m_AddrF0 = _T("");
m_AddrF1 = _T("");
//}}AFX_DATA_INIT
}
void CRWset::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRWset)
DDX_Control(pDX, IDC_ADDRF1, m_Addrf1);
DDX_Control(pDX, IDC_ADDRF0, m_Addrf0);
DDX_Control(pDX, IDC_ADDRB1, m_Addrb1);
DDX_Control(pDX, IDC_ADDRB0, m_Addrb0);
DDX_Text(pDX, IDC_ADDRB0, m_AddrB0);
DDX_Text(pDX, IDC_ADDRB1, m_AddrB1);
DDX_Text(pDX, IDC_ADDRF0, m_AddrF0);
DDX_Text(pDX, IDC_ADDRF1, m_AddrF1);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CRWset, CDialog)
//{{AFX_MSG_MAP(CRWset)
ON_EN_CHANGE(IDC_ADDRB0, OnChangeAddrb0)
ON_EN_CHANGE(IDC_ADDRB1, OnChangeAddrb1)
ON_BN_CLICKED(IDC_RESETX, OnResetx)
ON_EN_CHANGE(IDC_ADDRF0, OnChangeAddrf0)
ON_EN_CHANGE(IDC_ADDRF1, OnChangeAddrf1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRWset message handlers
void CRWset::OnChangeAddrb0()
{
UpdateData(TRUE);
ChkAddr(&m_Addrb0,&m_AddrB0,&Addrb0);
}
void CRWset::OnChangeAddrb1()
{
UpdateData(TRUE);
ChkAddr(&m_Addrb1,&m_AddrB1,&Addrb1);
}
void CRWset::OnChangeAddrf0()
{
UpdateData(TRUE);
ChkAddr(&m_Addrf0,&m_AddrF0,&Addrf0);
}
void CRWset::OnChangeAddrf1()
{
UpdateData(TRUE);
ChkAddr(&m_Addrf1,&m_AddrF1,&Addrf1);
}
int CRWset::ChkAddr(CEdit *z,CString *w,DWORD *Addr)
{
int lenH,j;
lenH=w->GetLength();
if(!lenH)return 0;
char x[100];
strcpy(x,(LPCTSTR)*w);
// int p=w->Find("0x");
// if(p==-1)p=w->Find("0X");
// if(p==-1) //十进制
if(lenH==1)
{if(!isdigit(x[0]))
{AfxMessageBox("输入的地址中有非数字字符!(如果地址为16进制,请以0x开头)");
goto ERR;
}
else return 0;
}
if(x[0]=='0' && (x[1]=='x' || x[1]=='X')) //16进制
{*Addr=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进制字符!"); goto ERR;};
*Addr+=(DWORD)(tmp*pow(16,y));
y++;
}
}
else// if(!(x[0]=='0' && (x[1]=='x' || x[1]=='X')))
{for(j=0;j<(int)lenH;j++)
{if(!isdigit(x[j]))
{AfxMessageBox("输入的地址中有非数字字符!(如果地址为16进制,请以0x开头)");
goto ERR;
}
}
*Addr=atoi(x);
// sprintf(x,"\n请确认输入的地址:%d(10进制),0X%X(16进制)",i,i);
}
// else goto ERR;
// sprintf(x,"\n请确认输入的地址:%d(10进制),0X%X(16进制)",*Addr,*Addr);
// AfxMessageBox(x);
return 0;
ERR:
*w=_T("");
UpdateData(FALSE);
return 1;
}
BOOL CRWset::OnInitDialog()
{
CDialog::OnInitDialog();
InitData();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CRWset::OnResetx()
{
InitData();
}
void CRWset::InitData()
{
Addrb0=Addrf0=0;
Addrb1=0x1fffff;
m_AddrB0=m_AddrF0=_T("0x000000");
m_AddrB1=_T("0x1FFFFF");
char s[50];
sprintf(s,"0X%06x",Addrf1);
m_AddrF1=_T(s);
if(flag==1)SetWindowText("读取FLASH数据--参数设置");
else if(flag==2)SetWindowText("FLASH编程--参数设置");// m_Addrb1.EnableWindow(FALSE);}
UpdateData(FALSE);
}
void CRWset::OnOK()
{
UpdateData(TRUE);
if(Addrb1<Addrb0 || Addrf1<Addrf0)
{ AfxMessageBox("参数错误!!\n\n结束地址<起始地址");
return;
}
if(Addrb0>MAXFILELEN || Addrf0>MAXFILELEN)
{ AfxMessageBox("参数错误!!\n\n起始地址大于上限0x4C0000");
return;
}
if((Addrb0+Addrf1-Addrf0)>MAXFILELEN)
{ AfxMessageBox("参数错误!!\n\n导致缓冲区地址大于上限0x4C0000");
return;
}
CDialog::OnOK();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -