📄 grammerdlg.cpp
字号:
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 + -