📄 iic_pcdlg(pc上的程序).cpp
字号:
CString strTemp = '0';
strTemp += strTransfer;
for(int i = 0; i<257; i++)
{
temp[i]=strTemp[i];
}
m_ctrlComm.SetOutput(COleVariant("3$W$"));//发送ASCII字符数据
Delay(1000);
m_ctrlComm.SetOutput(COleVariant(strTemp));
Delay(1000);
}
//延时
void CIIC_PCDlg::Delay(int n)
{
int i = 0;
for (int j = 0; j<n; j++)
{
i+=1;
i-=1;
}
}
//Browse键被按下
void CIIC_PCDlg::OnBUTTONBrowse()
{
// TODO: Add your control notification handler code here
LPCSTR lpszPath = "c:\\";
SetCurrentDirectory( lpszPath );
static char BASED_CODE szFilter[] = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||";
CFileDialog FileDlg( TRUE, NULL, NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
szFilter );
FileDlg.m_ofn.lpstrInitialDir = lpszPath ;
if( FileDlg.DoModal() ==IDOK )
{
// CString strFileName = FileDlg.GetFileName( );
// CString strFileExt = FileDlg.GetFileExt( );
CString lpstrName = FileDlg.GetPathName( );
m_strSendFilePathName=lpstrName;
UpdateData(FALSE);
}
CFile fp;
if(!(fp.Open((LPCTSTR)m_strSendFilePathName,CFile::modeRead)))
{
AfxMessageBox("Open file failed!");
return;
}
fp.SeekToEnd();
int fplength=fp.GetLength();
if(fplength>128)
{
AfxMessageBox("The file is too long (>128)");
return;
}
char* fpBuff;
fpBuff=new char[fplength];
fp.SeekToBegin();
if(fp.Read(fpBuff,fplength)<1)
{
fp.Close();
return;
}
fp.Close();
strMem.Empty();
for (int i = 0; i<fplength; i++)
{
strMem += ConvertHex2String(int(fpBuff[i]), 2);
}
for (i = fplength; i<256; i++)
{
strMem += '0';
}
strTransfer = strMem;
Refresh();
delete fpBuff;
}
//Save 2 file键被按下
void CIIC_PCDlg::OnButtonSavefile()
{
// TODO: Add your control notification handler code here
CFile fp;
UpdateData(TRUE);
const char *pFileName = (LPCTSTR)m_strSendFilePathName;
if(!(fp.Open(pFileName,CFile::modeCreate | CFile::modeWrite)))
{
AfxMessageBox("Open file failed!");
return;
}
fp.SeekToEnd();
unsigned long fplength=128;
char* fpBuff;
fpBuff=new char[fplength];
for (int i = 0; i<128; i++)
{
fpBuff[i] = (char)ConvertString2Hex(strMem.Mid(i*2,2));
}
fp.SeekToBegin();
fp.Write(fpBuff,fplength);
fp.Close();
delete fpBuff;
}
//Edit键被按下
void CIIC_PCDlg::OnButtonEdit()
{
// TODO: Add your control notification handler code here
CString strTemp;
m_strMem = m_ctrlMem.GetText();
strMem = m_strMem;
strTransfer.Empty();
for (int j = 0; j<8; j++)
{
for (int i = 0; i<16; i++)
{
strTransfer += strMem.Mid(6*(j+1)+i*3+66*j, 2);
}
}
Write();
}
//Clean键被按下
void CIIC_PCDlg::OnButtonClean()
{
// TODO: Add your control notification handler code here
strMem = "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
Refresh();
}
void CIIC_PCDlg::OnMenuEmpty()
{
// TODO: Add your command handler code here
OnButtonClear();
}
void CIIC_PCDlg::OnMenuFileOpen()
{
// TODO: Add your command handler code here
OnBUTTONBrowse();
}
void CIIC_PCDlg::OnMenuFileSave()
{
// TODO: Add your command handler code here
OnButtonSavefile();
}
void CIIC_PCDlg::OnMenuTransferRead()
{
// TODO: Add your command handler code here
OnButtonRead();
}
void CIIC_PCDlg::OnMenuTransferWrite()
{
// TODO: Add your command handler code here
OnButtonEdit();
}
void CIIC_PCDlg::OnMouseUpEditMem(short Button, short Shift, long x, long y)
{
// TODO: Add your control notification handler code here
int pt = m_ctrlMem.GetSelStart();
int ptNew = NewPt(pt);
m_ctrlMem.SetSelStart(ptNew);
m_ctrlMem.SetSelLength(1);
charOld = m_ctrlMem.GetText().Mid(ptNew, 1)[0];
// m_ctrlMem.SetFocus();
}
int CIIC_PCDlg::NewPt(int ptOld)
{
int ptTemp = ptOld;
int line = 72;
ptTemp %= line;
ptFunction = 1;
if (ptTemp<6)
{
ptTemp = ptOld/line*line+6;
ShowPt(ptTemp);
return (ptTemp);
}
if (ptTemp<53)
{
if (!((ptTemp-5)%3))
{
ptTemp = ptOld+1;
ShowPt(ptTemp);
return (ptTemp);
}
ptTemp = ptOld;
ShowPt(ptTemp);
return ptTemp;
}
if (ptTemp==53)
{
if (ptOld == 557)
{
ptTemp = ptOld-1;
ShowPt(ptTemp);
return (ptTemp);
}
ptTemp = ptOld+25;
ShowPt(ptTemp);
return (ptTemp);
}
ptFunction = 2;
if (ptTemp==54)
{
ptTemp = ptOld+1;
ShowPt(ptTemp);
return (ptTemp);
}
if (ptTemp<71)
{
ptTemp = ptOld;
ShowPt(ptTemp);
return ptTemp;
}
if (ptOld==575)
{
ptTemp = ptOld-1;
ShowPt(ptTemp);
return (ptTemp);
}
ptTemp = ptOld+56;
ShowPt(ptTemp);
return (ptTemp);
}
void CIIC_PCDlg::OnChangeEditMem()
{
// TODO: Add your control notification handler code here
int pt = m_ctrlMem.GetSelStart();
charNew = m_ctrlMem.GetText().Mid(pt-1, 1)[0];
switch (ptFunction)
{case 1:
{
if ((charNew<47)||((charNew>57)&&(charNew<65))||((charNew>70)&&(charNew<97))||(charNew>102))
{
m_ctrlMem.SetText(m_ctrlMem.GetText().Left(pt-1)+charOld+m_ctrlMem.GetText().Right(575-pt));
m_ctrlMem.SetSelStart(pt-1);
m_ctrlMem.SetSelLength(1);
return;
}
if (charNew>96)
{
m_ctrlMem.SetText(m_ctrlMem.GetText().Left(pt-1)+(char)(charNew-32)+m_ctrlMem.GetText().Right(575-pt));
}
break;
}
case 2:
{
break;
}
}
ChangeChar(pt-1);
int ptNew = NewPt(pt);
m_ctrlMem.SetSelStart(ptNew);
m_ctrlMem.SetSelLength(1);
}
void CIIC_PCDlg::ChangeChar(int pt)
{
int ptTemp = pt, ptRelative, line = 72;
ptTemp %= line;
switch (ptFunction)
{
case 1:
{
ptRelative = (ptTemp-6)/3;
ptTemp = pt/line*line+56+ptRelative;
CString temp = m_ctrlMem.GetText().Mid(pt/line*line+ptRelative*3+6,2);
intTemp = ConvertString2Hex(temp);
if ((intTemp<32)||(intTemp>127))
intTemp = 46;
m_ctrlMem.SetText(m_ctrlMem.GetText().Left(ptTemp-1)+(char)intTemp+m_ctrlMem.GetText().Right(575-ptTemp));
break;
}
case 2:
{
ptRelative = (ptTemp-55);
ptTemp = pt/line*line+6+ptRelative*3;
CString temp = m_ctrlMem.GetText().Mid(pt, 1);
temp = ConvertHex2String(temp[0], 2);
m_ctrlMem.SetText(m_ctrlMem.GetText().Left(ptTemp)+temp+m_ctrlMem.GetText().Right(575-ptTemp-2));
break;
}
}
}
void CIIC_PCDlg::ShowPt(int pt)
{
int ptTemp = pt, ptRelative, line = 72;
ptTemp %= line;
switch (ptFunction)
{
case 1:
{
ptRelative = (ptTemp-6)/3;
break;
}
case 2:
{
ptRelative = (ptTemp-55);
break;
}
}
ptRelative += pt/line*16;
m_strDataAddress = ConvertHex2String(ptRelative, 4);
UpdateData(FALSE);
}
void CIIC_PCDlg::OnChangeEditDtadr()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CString temp = m_strDataAddress;
if (temp.GetLength() != 4)
return;
if ((temp[0]!='0')||(temp[1]!='0'))
return;
for (int i = 2; i<4; i++)
{
if ((temp[i]<47)||((temp[i]>57)&&(temp[i]<65))||((temp[i]>70)&&(temp[i]<97))||(temp[i]>102))
{
return;
}
if (charNew>96)
{
temp.SetAt(i, char(temp[i])-32);
}
}
int mem = ConvertString2Hex(temp.Right(2));
if (mem>128)
return;
int line = mem/16;
int row = mem%16;
int pt = line*72+6+row*3;
m_ctrlMem.SetSelStart(pt);
m_ctrlMem.SetSelLength(1);
m_ctrlMem.SetFocus();
}
void CIIC_PCDlg::OnMenuEditUndo()
{
// TODO: Add your command handler code here
}
void CIIC_PCDlg::OnKeyUpEditMem(short FAR* KeyCode, short Shift)
{
// TODO: Add your control notification handler code here
int pt = m_ctrlMem.GetSelStart();
int ptNew = NewPt(pt);
m_ctrlMem.SetSelStart(ptNew);
m_ctrlMem.SetSelLength(1);
charOld = m_ctrlMem.GetText().Mid(ptNew, 1)[0];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -