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

📄 xricheditctrl.cpp

📁 串口的监控程序,提供了固定命令模式和
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				{
					if(isascii(chr)==0)
						 strError.Format("第 %d 个字节的低位为非ASCII字符,其16进制为:  %2X H。必须是16进制数",i/3+1,(BYTE)chr);
					else strError.Format("第 %d 个字节的低位不能为  \' %c \',必须是16进制数",i/3+1,chr);
				}
				nErrorPos=i+j+1;
				return 0;
			}
		}
	}
	return 1;
}

//##ModelId=3FFC8F3900DC
BOOL CXRichEditCtrl::IsHexFormat(int nLineIndex)
{
	CHKLINE(nLineIndex);
	CString str,strError;
	int nErrorPos;
	GetLineStr(str,nLineIndex);
	if(IsHexFormat(str,strError,nErrorPos))	
	{
		str.Empty();
		strError.Empty();
		return 1;
	}
	CString strtmp;
	strtmp.Format("第 %d 行    报文格式出错:\n\n",nLineIndex+1);
	strtmp+=strError;
	strtmp+="\n\n报文格式:";
	strtmp+="\n1、每 2 个字节间有一个空格;";
	strtmp+="\n2、每个字节必须为16进制数:0~9,a~f,A~F;";
	strtmp+="\n3、最后一个字节后不能有任何字符。";
	strtmp+="\n\n示例报文(共5个字节):EB  90  02  34  0D";
	AfxMessageBox(strtmp);
	strtmp.Empty();
	str.Empty();
	strError.Empty();
	SetFocus();
	int nError=LineIndex(nLineIndex)+nErrorPos;
	SetSel(nError,nError);
	return 0;
}

//##ModelId=3FFC8F3900DA
int CXRichEditCtrl::GetLineLength(int nLineIndex)
{
	CHKLINE(nLineIndex);
	return LineLength(LineIndex(nLineIndex));
}

static DWORD CALLBACK 
CXRichEditCtrlStreamOutCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
	CFile* pFile = (CFile*) dwCookie;
	pFile->Write(pbBuff, cb);
	*pcb = cb;

	return 0;
}

//##ModelId=3FFC8F3900CD
BOOL CXRichEditCtrl::SaveFile(LPCTSTR str)
{
	CFile fld;
	if(!fld.Open( str, CFile::modeCreate|CFile::modeWrite))
	{
		if(!fld.Open( GetFilePath(1), CFile::modeCreate|CFile::modeWrite))
			return 0;
	}
	EDITSTREAM strm;
	strm.dwCookie = (DWORD) &fld;
	strm.pfnCallback = CXRichEditCtrlStreamOutCallback;
	StreamOut(SF_RTF, strm);
	SetModify(FALSE);
	AfxGetApp()->WriteProfileString("Settings" ,"XREPath", str);
	fld.Close();
	return 1;
}
static DWORD CALLBACK 
CXRichEditCtrlStreamInCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
	CFile* pFile = (CFile*) dwCookie;
	*pcb = pFile->Read(pbBuff, cb);

	return 0;
}

//##ModelId=3FFC8F3900CB
BOOL CXRichEditCtrl::LoadFile(LPCTSTR str)
{
	CFile fld;
	if(!fld.Open( str, CFile::modeRead))
	{
		if(!fld.Open( GetFilePath(1), CFile::modeRead))
			return 0;
	}
	EDITSTREAM strm;
	strm.dwCookie = (DWORD) &fld;
	strm.pfnCallback = CXRichEditCtrlStreamInCallback;
	StreamIn(SF_RTF, strm);
	SetModify(FALSE);		
	fld.Close();
	return 1;
}

//##ModelId=3FFC8F3900BC
void CXRichEditCtrl::HexToStr(BYTE *btData, int nLength, CString &strOutput)
{
	if((btData==NULL)||(nLength<1)) return;
	CString strCvt;   
	int nl=nLength-1;
	for(int i = 0; i < nl; i++)                           
	{          
		strCvt.Format("%02X ", btData[i]);     
	   	strOutput += strCvt;                                    
	}         
	strCvt.Format("%02X", btData[i]);
	strOutput+=strCvt;
	strCvt.Empty();
}

//##ModelId=3FFC8F3900AE
CString CXRichEditCtrl::HexToStr(BYTE *btData, int nLength)
{
	if((btData==NULL)||(nLength<1))	return "";
	CString strCvt,strOutput;   
	int nl=nLength-1;
	for(int i = 0; i < nl; i++)                           
	{          
		strCvt.Format("%02X ", btData[i]);     
	   	strOutput += strCvt;                                    
	}         
	strCvt.Format("%02X", btData[i]);
	strOutput+=strCvt;
	strCvt.Empty();
	return strOutput;
}

//##ModelId=3FFC8F3900AB
int CXRichEditCtrl::StrToHex(CString str,BYTE* btData)
{
	int nLength=str.GetLength();
	if(nLength<2)	return 0;
	for(int i=0;i<nLength;i+=2)	
		_stscanf(str.Mid(i,2),"%03X",&btData[i/2]);

	return (i+1)/2;
}

//##ModelId=3FFC8F39009F
int CXRichEditCtrl::GetLineIndex(int nLineIndex)
{
	CHKLINE(nLineIndex);
	return nLineIndex;
}

//##ModelId=3FFC8F390227
int CXRichEditCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (LoadLibraryA(_T("RICHED20.DLL")) == NULL)
	{
		AfxMessageBox("RICHED20.DLL 未找到", MB_OK|MB_ICONEXCLAMATION);
		PostMessage(WM_QUIT,0,0);
		return -1;
	}

	if (CRichEditCtrl::OnCreate(lpCreateStruct) == -1)
		return -1;
	SetDefaultFont();
	SetEventChange();
	SetBackgroundColor(FALSE, RGB(240,240,240));
	// TODO: Add your specialized creation code here
	LoadFile(GetFilePath(0));
	return 0;
}

//##ModelId=3FFC8F39009E
DWORD CXRichEditCtrl::SetEventChange()
{
	long lMask = GetEventMask();
	lMask |= ENM_CHANGE;
	return SetEventMask(lMask);
}

//##ModelId=3FFC8F390233
void CXRichEditCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CRichEditCtrl::OnLButtonDown(nFlags, point);
	LN_COL_MSG(MAKELPARAM(GetLineIndex(),GetCursorCol()))
}

//##ModelId=3FFC8F390243
void CXRichEditCtrl::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
	CRichEditCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
	LN_COL_MSG(MAKELPARAM(GetLineIndex(),GetCursorCol()))
}

//##ModelId=3FFC8F39007D
BOOL CXRichEditCtrl::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	switch(pMsg->message) 
	{
	case WM_KEYDOWN:
		if(IsCASDown(4))//ctrl+alt
		{
			switch (pMsg->wParam)
			{  
			case 'U':
			case 'L':
				MakeUpperLower((pMsg->wParam=='U')?1:0);
				return TRUE;
			case 'H':
			case 'A':
				MakeAscHex((pMsg->wParam=='A')?1:0);
				return TRUE;
			case 'P':
				IsHexFormat();
				return TRUE;
			case 'B':
			case 'G':
			case 'Y':
			case 'T':
			case 'R':
				if(GetSelText().IsEmpty())	SetSel(GetLineStart(),GetLineEnd());
				if(pMsg->wParam=='B')	SetWordCharFormat(m_cfRecv);
				else if(pMsg->wParam=='T')	SetWordCharFormat(m_cfText);
				else if(pMsg->wParam=='G')	SetWordCharFormat(m_cfComment);
				else if(pMsg->wParam=='Y')	SetWordCharFormat(m_cfGray);
				else if(pMsg->wParam=='R')	SetWordCharFormat(m_cfSend);
			//	SetSel(GetLineStart(),GetLineStart());
				return TRUE;
			case ' ':
				ReplaceSel("");
			//	SetSel(GetLineStart(),GetLineEnd());
				if(!GetLineStr().IsEmpty())	ReplaceStr("",5);
				SetSel(GetLineStart(),GetLineStart());
				SetWordCharFormat(m_cfComment);
				ReplaceStr("<<--    -->>",5);
			//	HideCaret();
			//	DestroyCaret();
				/*
			   CBitmap* pBitmap = new CBitmap;
			   pBitmap->LoadBitmap(IDB_BITMAP1);
				CreateCaret(pBitmap);
			   ShowCaret();	
				*/
				return TRUE;
			}
		}
		else if(IsCASDown(3))//ctrl
		{
			switch (pMsg->wParam)
			{  
			case 'V':
				PasteSpecial(CF_TEXT);	return TRUE;
			case 'C':
				Copy();					return TRUE;
			case 'X':
				Cut();					return TRUE;
			case 'A':
				SetSel(0,-1);			return TRUE;
			case 'Z':
				Undo();					return TRUE;
			case 'R':
				m_bReadOnly=!m_bReadOnly;
				SetReadOnly(m_bReadOnly);
				if(m_bReadOnly)	SetBackgroundColor(FALSE,RGB(210,210,210));
				else			SetBackgroundColor(FALSE,RGB(230,230,230));
				return TRUE;
			}
		}
		break;
	}
	
	return CRichEditCtrl::PreTranslateMessage(pMsg);
}

//##ModelId=3FFC8F390253
void CXRichEditCtrl::OnChange() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CRichEditCtrl::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	LN_COL_MSG(MAKELPARAM(GetLineIndex(),GetCursorCol()))
	// TODO: Add your control notification handler code here
	
}

//##ModelId=3FFC8F39009C
BOOL CXRichEditCtrl::IsCASDown(int nFlag)
{
	if(nFlag==0)		return (::GetKeyState(VK_CONTROL) < 0);
	else if(nFlag==1)	return (::GetKeyState(VK_MENU) < 0);
	else if(nFlag==2)	return (::GetKeyState(VK_SHIFT) < 0);
	else if(nFlag==3)	
	{
		return	(::GetKeyState(VK_CONTROL) < 0)&&(::GetKeyState(VK_MENU) >= 0)
			&&(::GetKeyState(VK_SHIFT) >= 0);
	}
	else if(nFlag==4)	
	{
		return	(::GetKeyState(VK_CONTROL)<0)&&(::GetKeyState(VK_MENU)  <  0)
			&&(::GetKeyState(VK_SHIFT) >= 0);
	}
	return 0;
}

//##ModelId=3FFC8F39008F
CString CXRichEditCtrl::GetFilePath(int nFlag)
{
	CString str;
	str=AfxGetApp()->GetProfileString("Settings","XREPath");
	if(!str.IsEmpty()&&!nFlag)	return str;

	::GetModuleFileName(NULL,str.GetBufferSetLength(MAX_PATH+1), MAX_PATH);
	int position=str.ReverseFind('\\'); 
	str=str.Left(position+1)+AfxGetApp()->m_pszExeName+".pcf";
	return str;
}

//##ModelId=3FFC8F39008C
int CXRichEditCtrl::GotoLine(int nFlag, int nLineIndex)
{
	CHKLINE(nLineIndex);
	if(nFlag==1)
	{
		nLineIndex+=1;
		if(nLineIndex>=GetLineCount())	nLineIndex-=1;
	}
	else if(nFlag==2)
	{
		if(nLineIndex>0)	nLineIndex-=1;
	}
	SetSel(LineIndex(nLineIndex),LineIndex(nLineIndex));
	return nLineIndex;
}

//##ModelId=3FFC8F390261
void CXRichEditCtrl::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CRichEditCtrl::OnMouseMove(nFlags, point);

	if(!GetSelText().IsEmpty())	
	{
		long ns=0,ne=0;
		GetSel(ns,ne);	
		if(GetSelText().Right(1)=='\n')	ne-=1;
		ns=GetLineStart(LineFromChar(ne));
		LN_COL_MSG(MAKELPARAM(LineFromChar(ne),ne-ns))
	}
}



⌨️ 快捷键说明

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