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

📄 grammerdlg.cpp

📁 一个pascal子集编译器。输入pascal原程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	
    long nStart, nEnd,i,j;
    CString strTemp;
		CHARFORMAT cf,cl;
		m_rich.GetDefaultCharFormat(cl);
	CString temp_word;
	m_rich.GetWindowText(temp_word);
	m_rich.GetSel(nStart, nEnd);
	for(i=0;i<temp_word.GetLength();i++)
	{
		for(j=0;j<keywordsnum;j++)
		{
			if(temp_word.Mid(i,strlen(strkeywords[j]))==strkeywords[j])
			{
			ZeroMemory(&cf, sizeof(CHARFORMAT));
			cf.cbSize = sizeof(CHARFORMAT);
			cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |
							CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
			cf.dwEffects = 0;
			cf.yHeight = 15*15;//文字高度
			cf.crTextColor = RGB(248, 7, 7); //文字颜色
			strcpy(cf.szFaceName ,_T("Arial"));//设置字体
 
			m_rich.SetSel(i, i+strlen(strkeywords[j])); //设置处理区域
			m_rich.SetSelectionCharFormat(cf);
			}
		}
//		m_rich.SetSel(temp_word.GetLength(),temp_word.GetLength());	
	}
	 m_rich.SetSel(nStart, nEnd);
	 m_rich.SetWordCharFormat(cl);
*/	 
}

void CGrammerDlg::On_File_Open() //打开
{
CFileDialog dlg(TRUE, "*.txt", NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Grammer Files(*.txt)|*.txt|All Files(*.*)|*.*|"); 
if ( dlg.DoModal()!=IDOK )
  return;
 //获取文件的绝对路径
CString sFileName=dlg.GetPathName();
CStdioFile file;
if(!file.Open(sFileName,CFile::modeRead))
{
	AfxMessageBox("打开失败!");
	return;
}
SetWindowText(sFileName);
CString grammer_text,temp;
m_rich.SetWindowText("");
this->List_Clear();
grammer_text.Empty();
while(1)
{
	if(!file.ReadString(temp))
		break;
	grammer_text=grammer_text+temp+"\n";
}
file.Close();	
m_rich.SetWindowText(grammer_text);
m_error.AddString("文件加载完成");
Save_Switch=0;
}
void CGrammerDlg::On_File_Save() //保存
{
	CString title;
	GetWindowText(title);
	if(title=="无标题- PASCAL分析程序")
	{
		CFileDialog dlg(FALSE, "*.txt", NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Grammer Files(*.txt)|*.txt|All Files(*.*)|*.*|"); 
		if ( dlg.DoModal()!=IDOK )
		  return;
		title=dlg.GetPathName();
		SetWindowText(title);
	}
	CStdioFile file;
	if(!file.Open(title,CFile::modeWrite|CFile::modeCreate))
	{
		m_out.AddString("打开新文件失败");
		return;
	}
	CString grammer_text,temp;
	m_rich.GetWindowText(grammer_text);
	file.WriteString(grammer_text);
	file.Close();	
	m_out.AddString("文件已保存");

}

void CGrammerDlg::OnSize(UINT nType, int cx, int cy) 
{
	CResizableDialog::OnSize(nType, cx, cy);
  CRect   rc;   
  GetClientRect(&rc);   
  if(m_rich.GetSafeHwnd()!=NULL)     
  {
	  m_rich.SetWindowPos(0,5,0,cx-10,cy-155,0);  	
      m_out.SetWindowPos(0,5,cy-150,cx-10,150,0);  	
	}
}

void CGrammerDlg::OnEditCopy() 
{
	m_rich.Copy();	
}

void CGrammerDlg::OnEditPaste() 
{
	m_rich.Paste();	
}

void CGrammerDlg::OnEditCut() 
{
	m_rich.Cut();
}

void CGrammerDlg::OnEditUndo() 
{
	m_rich.Undo();	
}

void CGrammerDlg::OnDelete() 
{
	m_rich.Clear();
}




void CGrammerDlg::OnEditSelectAll() 
{
	m_rich.SetSel(0,-1);	
}

void CGrammerDlg::On_File_Exit() 
{
	this->OnClose();
}


void CGrammerDlg::OnClose() 
{
	CString title;
	int temp;
	GetWindowText(title);
	if(Save_Switch)
	{	
		temp=MessageBox("文件 "+title+" 的内容已经改变\n想保存文件吗?","PASCAL分析程序",MB_YESNOCANCEL|MB_ICONWARNING);
		if(temp==6)
		{
			if(title=="无标题- PASCAL分析程序")
			{
				CFileDialog dlg(FALSE, "*.txt", NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Grammer Files(*.txt)|*.txt|All Files(*.*)|*.*|"); 
				if ( dlg.DoModal()!=IDOK )
					return;
				title=dlg.GetPathName();
				SetWindowText(title);
			}
			CStdioFile file;
			if(!file.Open(title,CFile::modeWrite|CFile::modeCreate))
			{
				m_out.AddString("打开新文件失败");
				return;
			}
			CString grammer_text,temp;
			m_rich.GetWindowText(grammer_text);
			file.WriteString(grammer_text);
			file.Close();	
			
		}
		else if(temp==2)
			return;
	}
	
	CResizableDialog::OnClose();
}

void CGrammerDlg::OnFileSaveas() 
{
	CString title;
	CFileDialog dlg(FALSE, "*.txt", NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Grammer Files(*.txt)|*.txt|All Files(*.*)|*.*|"); 
	if ( dlg.DoModal()!=IDOK )
	  return;
	title=dlg.GetPathName();
	SetWindowText(title);
	CStdioFile file;
	if(!file.Open(title,CFile::modeWrite|CFile::modeCreate))
	{
		m_out.AddString("打开新文件失败");
		return;
	}
	CString grammer_text,temp;
	m_rich.GetWindowText(grammer_text);
	file.WriteString(grammer_text);
	file.Close();	
	this->List_Clear();
	m_error.AddString("新文件加载完成");
}
void CGrammerDlg::List_Clear()
{
	int out_len=m_out.GetCount();
	for(int i=0;i<out_len;i++)
		m_out.DeleteString(0);	
}

void CGrammerDlg::OnFileNew() 
{
	CString title;
	int temp;
	GetWindowText(title);
	if(Save_Switch)
	{	
		temp=MessageBox("文件 "+title+" 的内容已经改变\n想保存文件吗?","PASCAL分析程序",MB_YESNOCANCEL|MB_ICONWARNING);
		if(temp==6)
		{
			if(title=="无标题- PASCAL分析程序")
			{
				CFileDialog dlg(FALSE, "*.txt", NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Grammer Files(*.txt)|*.txt|All Files(*.*)|*.*|"); 
				if ( dlg.DoModal()!=IDOK )
					return;
				title=dlg.GetPathName();
				SetWindowText(title);
			}
			CStdioFile file;
			if(!file.Open(title,CFile::modeWrite|CFile::modeCreate))
			{
				m_out.AddString("打开新文件失败");
				return;
			}
			CString grammer_text,temp;
			m_rich.GetWindowText(grammer_text);
			file.WriteString(grammer_text);
			file.Close();	
			
		}
		else if(temp==2)
			return;
	}
	SetWindowText("无标题- PASCAL分析程序");
	m_rich.SetWindowText("");
}

void CGrammerDlg::OnCompile() 
{
	AfxMessageBox("Compile");
	
}

void CGrammerDlg::OnRun() 
{
	int i;//,p;
	CString aa;
	ExpressAnalysis ea;
	CString temp;
	m_rich.GetWindowText(aa);
/*	m_rich.SetSel(5,5);*/
/*	AfxMessageBox(aa);*/
//	ea.MainAction(aa);
	m_out.ResetContent();
/*
	for(i=10;i<ea.Get_forLen();i++)
	{
		temp.Format("%d %s,%s,%s,%s",i,four[i].op,four[i].arg1,four[i].arg2,four[i].result);
		m_out.AddString(temp);
	}
*/
	if(TRUE==ea.MainAction(aa))
	{
		m_error.ResetContent();
		for(i=10;i<ea.Get_codLen();i++)
		{
			temp.Format("%d %s,%d,%d",i,code[i].op,code[i].arg1,code[i].arg2);
			m_out.AddString(temp);
		}
	}
	else
	{
		m_error.ResetContent();
		temp.Format("%s",error);
		m_error.AddString(temp);

	int beginl[500],endl[500],numl=0;
	Save_Switch=1;
    long nStart, nEnd,i,p;
    CString strTemp;
	CHARFORMAT cf,cl;
	m_rich.GetDefaultCharFormat(cl);

	CString temp_word;
	m_rich.GetWindowText(temp_word);
	m_rich.GetSel(nStart, nEnd);
	beginl[numl]=0;
	for(i=0;i<temp_word.GetLength();i++)
	{
		if(temp_word.Mid(i,1)=="\r")
		{
			endl[numl]=i;
			numl++;
			beginl[numl]=i+2;
		}
	}
	p=m_out.GetCurSel();
	if(!(lastbegin==-100 && lastend==-100))
	{
			m_rich.GetDefaultCharFormat(cl);
			m_rich.SetSel(lastbegin,lastend); //设置处理区域
			m_rich.SetSelectionCharFormat(cl);
	}
	cf.cbSize = sizeof(CHARFORMAT);
	cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |
							CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
	cf.dwEffects = 0;
	cf.yHeight = 15*15;//文字高度
	cf.crTextColor = RGB(247, 7, 7); //文字颜色
	strcpy(cf.szFaceName ,_T("Arial"));//设置字体
 
	m_rich.SetSel(beginl[tempword.line-1], endl[tempword.line-1]); //设置处理区域
	lastbg=beginl[tempword.line-1];
	lasted= endl[tempword.line-1];
	m_rich.SetSelectionCharFormat(cf);
	}
/*	WordAnalysis waq;
	opwords every;
	every=waq.GetOneWord();
	while(every.type!=SIGN_OVER)
	{
		m_out.AddString(every.data);
		every=waq.GetOneWord();
	}
*/
/*	for(i=0;i<ea.Get_FhdisTop();i++)
	{
		temp.Format("fhdis[%d] pre=%d go=%d",i,fhdis[i].pre,fhdis[i].go);
		m_out.AddString(temp);
	}
	for(i=0;i<ea.Get_FhTop();i++)
	{
		temp.Format("fh[%d] name=%s type=%d address=%d",i,fh[i].name,fh[i].info.type,fh[i].info.address);
		m_out.AddString(temp);
	}
*/
}

BOOL CGrammerDlg::OnCommand(WPARAM wParam, LPARAM lParam) 
{
	// TODO: Add your specialized code here and/or call the base class
//	ON_COMMAND(ID_RICH_SELECTALL,   OnSelectall)   
	return CResizableDialog::OnCommand(wParam, lParam);
}

⌨️ 快捷键说明

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