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

📄 iic_pcdlg(pc上的程序).cpp

📁 本压缩包是设计IC卡读写器的一个例程
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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 + -