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

📄 mainfrm.cpp

📁 涉及到SkinMagicLiB等多种界面开发库的应用
💻 CPP
📖 第 1 页 / 共 2 页
字号:
}

void CMainFrame::OnUpdateXplus(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(!strcmp(skin,"XPLUS"));	
}

void CMainFrame::OnUpdateXpgrean(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(!strcmp(skin,"XPGREAN"));	
	
}

void CMainFrame::OnErase() 
{
	m_wndMyBars.AppendText("擦除芯片.");
	m_bWorkErase=TRUE;
	WorkProc(TRUE);
}

void CMainFrame::OnWrite() 
{
	OnCheckChip();
	SetTimer(1,1,NULL);
}

void CMainFrame::OnRead() 
{
	m_wndMyBars.AppendText("程序读取.");
	m_bWorkRead=TRUE;
	WorkProc(TRUE);
}

void CMainFrame::OnCheck() 
{
	m_wndMyBars.AppendText("程序校验.");
	m_bWorkCheck=TRUE;
	WorkProc(TRUE);	
}


void CMainFrame::OnLock()
{
	if(m_LockBits==0||m_LockBits>3)return;
    int id=m_wndToolBar.m_wndZoom.FindString(0,CurChip); 
	m_Pro.LockBit(id,m_LockBits);
	m_wndMyBars.AppendText("程序加密.");
}

void CMainFrame::WorkProc(BOOL bWork,BOOL bBeep)
{
	CMyDoc* doc;
	TRACE("WorkProc(%d)\n",bWork);
	//m_wndToolBar.m_wndZoom.GetWindowText(CurChip);
    int id=m_wndToolBar.m_wndZoom.FindString(0,CurChip); 
	doc=(CMyDoc*)(CMainFrame *)this->GetActiveFrame()->GetActiveDocument();
	if(!bWork)
	{
		if(bBeep)
			BeepError();
		return;
	}
	if(m_bWorkDetectPro)
	{
		m_Pro.DetectPro(id);
		m_bWorkDetectPro=FALSE;
		return;
	}
	if(m_bWorkDetectChip)
	{
		m_Pro.DetectChip(id);
		m_bWorkDetectChip=FALSE;
		return;
	}
	if(m_bWorkErase)
	{
		m_Pro.Erase(id);
		m_bWorkErase=FALSE;
		return;
	}
	if(m_bWorkWrite&&doc)
	{
		memset(m_Pro.m_pWriteBuf,0xff,0x10000);
		memcpy(m_Pro.m_pWriteBuf,doc->pcBuf,doc->m_pSize);
		m_Pro.m_pWriteBuf[doc->m_pSize]=0;
		m_Pro.Write(id);
		m_bWorkWrite=FALSE;
		return;
	}
	if(m_bWorkRead)
	{
		m_bCheck=FALSE;
		m_Pro.m_bCheck=FALSE;
		m_Pro.Read(id);
		m_bWorkRead=FALSE;
		return;
	}
	if(m_bWorkCheck)
	{
		memcpy(m_Pro.m_pWriteBuf,doc->pcBuf,doc->m_pSize);
		m_bCheck=TRUE;
		if(m_nWrCount==0)
			m_Pro.m_bCheck=FALSE;
		else
			m_Pro.m_bCheck=TRUE;
		m_Pro.Read(id);
		m_bWorkCheck=FALSE;
		return;
	}
	m_bAutoWork=FALSE;
	if(bBeep)
		BeepOk();
}

extern BOOL m_bWin98;
void CMainFrame::BeepError()
{
	if(m_bSound)
		if(!m_bWin98)
			AfxBeginThread(BeepErrorThread,this);
		else
			MessageBeep(MB_ICONEXCLAMATION);
		::FlashWindow(this->GetSafeHwnd(),TRUE);
}

void CMainFrame::BeepOk()
{
	if(m_bSound)
		if(!m_bWin98)
			AfxBeginThread(BeepOkThread,this);
		else
			MessageBeep(MB_OK);
}


UINT CMainFrame::BeepOkThread(LPVOID Param)
{
	Beep(2000,30);
	Sleep(100);
	Beep(2000,30);
	Sleep(100);
	Beep(2000,30);
	return 0;
}

UINT CMainFrame::BeepErrorThread(LPVOID Param)
{
	Beep(410,150);
	return 0;
}


void CMainFrame::OnLockbit1() 
{
	if(m_LockBits==1){m_LockBits=0;return;}
	m_LockBits=1;
	m_wndMyBars.AppendText("设置加密方式1:Lock Bit1.");
}

void CMainFrame::OnLockbit2() 
{
	if(m_LockBits==2){m_LockBits=0;return;}
	m_LockBits=2;
	m_wndMyBars.AppendText("设置加密方式2:Lock Bit1+2.");
}

void CMainFrame::OnLockbit3() 
{
	if(m_LockBits==3){m_LockBits=0;return;}
	m_LockBits=3;
	m_wndMyBars.AppendText("设置加密方式3:Lock Bit1+2+3.");
}

void CMainFrame::OnUpdateLockbit1(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_LockBits==1);
}

void CMainFrame::OnUpdateLockbit2(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_LockBits==2);
}

void CMainFrame::OnUpdateLockbit3(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_LockBits==3);
}

void CMainFrame::OnSetdia() 
{
	CSetDia dia;
	dia.m_AutoCheck=m_bAutoCheck;
	dia.m_pBanud=m_nBaudSel;
	dia.m_pProt=m_nSerialPort;
	dia.m_Sound=m_bSound;
	dia.m_pSpeed=m_nIspSpd;
	if(dia.DoModal()==IDOK)
	{
		m_bAutoCheck=dia.m_AutoCheck;
		m_Pro.m_pAutoCheck=m_bAutoCheck;
		m_nBaudSel=dia.m_pBanud;
		m_nSerialPort=dia.m_pProt;
		m_bSound=dia.m_Sound;
		m_nIspSpd=dia.m_pSpeed;
	}
}
UINT CMainFrame::OnProMsg(WPARAM dwMsg,LPARAM dwMsg2)
{
	BOOL bWork=FALSE;
	CString strMsg1,strMsg2,strMsg3;
	UINT len;
    int id=m_wndToolBar.m_wndZoom.FindString(0,CurChip); 
	switch(dwMsg)
	{
	case PRO_INIT_SERIAL_SEC:
		m_wndMyBars.AppendText("初始化串口通讯完成.");
		m_Pro.DetectPro(id);
		return 0;
	case PRO_INIT_SERIAL_ER:
		m_wndMyBars.AppendText("初始化串口通讯失败.");
		break;
	case PRO_INIT_PARALLEL_SEC:
		m_wndMyBars.AppendText("初始化并口完成.");
		return 0;
	case PRO_INIT_PARALLEL_ER:
		m_wndMyBars.AppendText("初始化并口失败.");
		break;
	case PRO_AVAILABLE:
		m_wndMyBars.AppendText("编程器:就绪.");
		m_wndStatusBar.SetWindowText("就绪");
		WorkProc(TRUE,FALSE);
		return 0;
	case PRO_INVALID:
		m_wndMyBars.AppendText("编程器:不可用.");

		break;
	case PRO_INIT_SERIAL_NOT:
		m_wndMyBars.AppendText("未初始化串口.");
		break;
	case PRO_RCV_ER:
		m_wndMyBars.AppendText("接收数据时发生错误.");
		break;
	case PRO_RD_SIGN:
		m_wndMyBars.AppendText("编程器:检测特征字结束.");
		m_pCheckEnd=true;
		OnSelectZoomed();
		bWork=TRUE;
		break;
	case PRO_DETECTCHIP_SEC:
		strMsg1.Format("(特征字:%02x %02x %02x).",m_Pro.SignByte[0],m_Pro.SignByte[1],m_Pro.SignByte[2]);
		m_wndMyBars.AppendText("编程器:检测到器件"+strMsg1);
		strMsg1=m_Pro.GetCurChip()->Name;
		strMsg2.Format(" - ROM容量:%dK字节.",m_Pro.GetCurChip()->RomSize);
		strMsg3.Format(" 编程电压:%.2fV.",m_Pro.GetCurChip()->ProVol);
		strMsg1=strMsg1+strMsg2+strMsg3;
		m_wndMyBars.AppendText(strMsg1);
		bWork=TRUE;
		break;
	case PRO_DETECTCHIP_ER:
		strMsg1.Format("(特征字:%02x %02x %02x).",m_Pro.SignByte[0],m_Pro.SignByte[1],m_Pro.SignByte[2]);
		m_wndMyBars.AppendText("编程器:没检测到器件"+strMsg1);
		bWork=FALSE;
		break;
	case PRO_ERASE:
		m_wndMyBars.AppendText("编程器:擦除器件完成.");
		bWork=TRUE;
		break;
	case PRO_WRITE_BEGIN:
		m_wndMyBars.AppendText("编程器:写器件开始.");
		strMsg1.Format("写入%d字节...",m_Pro.GetMinLength(m_Pro.m_pWriteBuf,0x10000));
		m_wndMyBars.AppendText(strMsg1);
		return 0;
	case PRO_WRITE_BLOCK:
		if(m_Pro.m_nDataLength==1 && m_Pro.m_nDataLength==0)
			return 0;
		char s[81];
		memset(s,' ',80);
		memset(s,'|',int(m_Pro.m_nAddr*80/(m_Pro.m_nDataLength-1)));
		s[81]=0;
		strMsg1.Format("正在写:%04X/%04X-%s",m_Pro.m_nAddr-1,m_Pro.m_nDataLength-1,s);
		m_wndStatusBar.SetWindowText(strMsg1);
		return 0;
	case PRO_WRITE_OVER:
		m_wndMyBars.AppendText("编程器:写器件完成.");
		m_nWrCount++;
		bWork=TRUE;
		if(m_bWorkRead || m_bWorkCheck && m_nProType==0)
			return 0;
		break;
	case PRO_WRITE_ER:
		m_wndMyBars.AppendText("编程器:写器件时发生错误.");
		break;
	case PRO_READ_BEGIN:
		m_wndMyBars.AppendText("编程器:读器件开始.");
		return 0;
	case PRO_READ_BLOCK:
		if(m_Pro.m_nDataLength==1 && m_Pro.m_nDataLength==0)
			return 0;
		strMsg1.Format("正在读:%04X/%04X--%d%%",m_Pro.m_nAddr-1,m_Pro.m_nDataLength-1,m_Pro.m_nAddr*100/(m_Pro.m_nDataLength-1));
		m_wndStatusBar.SetWindowText(strMsg1);
		return 0;
	case PRO_READ_OVER:
		m_wndMyBars.AppendText("编程器:读器件完成.");
		len=m_Pro.GetChipType(id)->RomSize*1024;
		theApp.NewDoc((char*)m_Pro.m_pReadBuf,len );
		CMyDoc* doc;
		doc=(CMyDoc*)(CMainFrame *)this->GetActiveFrame()->GetActiveDocument();
		doc->m_pSize=len;
		m_wndMyBars.AppendText("数据窗口已打开.");
		if(m_bCheck)
			bWork=CheckData();
		else
			bWork=TRUE;
		break;
	case PRO_LOCK_BIT:
		m_wndMyBars.AppendText("编程器:写锁定位完成.");
		bWork=TRUE;
		break;
	case PRO_WORK_INVALID:
		m_wndMyBars.AppendText("编程器:无效的操作.");
		break;
	default:
		break;
	}
	WorkProc(bWork);
	return 0;
}
BOOL CMainFrame::CheckData()
{
	UINT nPos,nCount=0;
	CString strMsg;
		
	m_wndMyBars.AppendText("-------------------效验开始------------------");
	m_wndStatusBar.SetWindowText("效验...");
	for(nPos=0;nPos<=0xffff;nPos++)
	{
		if(m_Pro.m_pWriteBuf[nPos]!=m_Pro.m_pReadBuf[nPos])
		{
			strMsg.Empty();
			nCount++;
			strMsg.Format("    %05d - 地址:%04x  写:%02x  读:%02x",nCount,nPos,m_Pro.m_pWriteBuf[nPos],m_Pro.m_pReadBuf[nPos]);
			strMsg.MakeUpper();
			m_wndMyBars.AppendText(strMsg);	
		}
	}
		strMsg.Format("共发现%5d个单元不对!",nCount);
		m_wndMyBars.AppendText(strMsg);
		m_wndMyBars.AppendText("-------------------效验结束------------------");
		m_bCheck=FALSE;
		if(nCount==0)
			return TRUE;
		else
			return FALSE;	
}

void CMainFrame::OnUpdateCheck(CCmdUI* pCmdUI) 
{
	CMyDoc * doc;
	doc=(CMyDoc*)(CMainFrame *)this->GetActiveFrame()->GetActiveDocument();
	pCmdUI->Enable(doc!=0);
}

void CMainFrame::OnUpdateWrite(CCmdUI* pCmdUI) 
{
	CMyDoc * doc;
	doc=(CMyDoc*)(CMainFrame *)this->GetActiveFrame()->GetActiveDocument();
	pCmdUI->Enable(doc!=0);
}

void CMainFrame::OnTxtwin() 
{
	BOOL bShow = m_wndMyBars.IsVisible();
	ShowControlBar(&m_wndMyBars, !bShow, FALSE);
}

void CMainFrame::OnUpdateTxtwin(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_wndMyBars.IsVisible());
}

void CMainFrame::OnChip() 
{
	CString strChipManagerPath;
	strChipManagerPath=m_strAppPath+"ChipManager.exe";
	ShellExecute(NULL, "open",strChipManagerPath ,NULL, NULL, SW_SHOW);
	
}

void CMainFrame::OnCheckChip() 
{
	m_pCheckEnd=false;
	m_wndMyBars.AppendText("检测芯片类型.");
	m_bWorkDetectChip=true;
	WorkProc(TRUE);	
	
}

void CMainFrame::OnTimer(UINT nIDEvent) 
{
	if(m_pCheckEnd)
	{
		KillTimer(1);	
		if(!m_Pro.m_pCheck&&m_bAutoCheck)
			m_wndMyBars.AppendText("器件检测失败,直接退出!");
		else
		{
			m_wndMyBars.AppendText("程序烧写.");
			m_bWorkWrite=TRUE;
			WorkProc(TRUE);
		}
	}

	CMDIFrameWnd::OnTimer(nIDEvent);
}

void CMainFrame::OnSize(UINT nType, int cx, int cy) 
{

	//CMDIFrameWnd::OnSize(nType, cx, cy);
	// TODO: Add your message handler code here
	CRect rect;
	GetWindowRect(&rect);
	rect.right=rect.left+700;
	rect.bottom=rect.top+500;
	MoveWindow(&rect);
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -