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

📄 mainfrm.cpp

📁 VC++设计语法编辑器
💻 CPP
📖 第 1 页 / 共 3 页
字号:
					int ncount = (strline.GetLength()>icrEditView->GetTabSize()? strline.GetLength():icrEditView->GetTabSize()); 
					for(int j=0; j<ncount; j++) {	
						if(strline[j]!=0x20)
							break;
					}
					SynCtrl.SetSel(nselstart, nselstart+j); 
					SynCtrl.ReplaceSel(_T(""), TRUE); //替换后可能引总行数减少
				}
			}
			int noldlinecount = SynCtrl.GetLineCount(); 
			int nnewlinecount = SynCtrl.GetLineCount();
			linenumber+=nnewlinecount-noldlinecount;
		}	
	}

	int nselstart = SynCtrl.LineIndex(nfirstline); 
	int nselend =  SynCtrl.LineIndex(nfirstline+linenumber);
	SynCtrl.SetSel(nselstart, nselend); 
	icrEditView->ShowWindow(SW_SHOW);	
}

void CMainFrame::OnEditUncomment() 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();
	CRichEditCtrl &SynCtrl = icrEditView->GetRichEditCtrl(); 

	int nfirstline, nendline;
	icrEditView->GetSelLine(nfirstline, nendline);
	
	//取当前语言对应的单行注释字符串
	CString strsinglecomment=icrEditView->GetSingleCommentString(icrEditView->GetLanguage());  
	if(strsinglecomment.IsEmpty()) //若为空串表示当前没有进行语法关键字显示
		return;
	CString strtext=_T(""), strline;
	
	icrEditView->ShowWindow(SW_HIDE);

	BOOL bpriorlinerealreturn;
	int linenumber = nendline - nfirstline + 1;
	
	for(int i=0; i<linenumber; i++) {
		if(nfirstline+i-1<0)//判断前一行行末是否是硬回车
			bpriorlinerealreturn = TRUE;
		else
			bpriorlinerealreturn = icrEditView->GetLineString(nfirstline+i-1, strline);
		icrEditView->GetLineString(nfirstline+i, strline);
		if(bpriorlinerealreturn || nfirstline==nendline) { //如果上一行是真的换行
			int nselstart = SynCtrl.LineIndex(nfirstline+i); 
			SynCtrl.SetSel(nselstart, nselstart);
			if(strline!=_T(" ")) {
				if(strline.Left(strsinglecomment.GetLength())==strsinglecomment) 
					SynCtrl.SetSel(nselstart, nselstart+strsinglecomment.GetLength()); 
				else {
					CString strtmp = strline;
					if(strtmp.GetLength()!=0) {
						while(strtmp.GetAt(0)==0x20 || strtmp.GetAt(0)=='\t') {
							strtmp.TrimLeft(0x20); 
							strtmp.TrimLeft('\t');
							if(strtmp.GetLength()==0)
								break;
						}
						if(strtmp.GetLength()>=strsinglecomment.GetLength() ) {
							if(strtmp.Left(strsinglecomment.GetLength())==strsinglecomment) {
								int npos = strline.Find(strsinglecomment);
								SynCtrl.SetSel( nselstart+npos, nselstart+npos+strsinglecomment.GetLength());
							}	
						}
					}
				}
			}
						
			int noldlinecount=SynCtrl.GetLineCount(); 
			SynCtrl.ReplaceSel(_T(""), TRUE); //此行可能引起总的行数减少
			int nnewlinecount=SynCtrl.GetLineCount();
			linenumber+=nnewlinecount-noldlinecount;
		}	
	}

	int nselstart = SynCtrl.LineIndex(nfirstline); 
	int nselend =  SynCtrl.LineIndex(nfirstline+linenumber);
	SynCtrl.SetSel(nselstart, nselend); 
	icrEditView->ShowWindow(SW_SHOW);
}

void CMainFrame::OnEditComment() 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();
	CRichEditCtrl &SynCtrl = icrEditView->GetRichEditCtrl(); 

	int nfirstline, nendline;
	icrEditView->GetSelLine(nfirstline, nendline);
	
	//取当前语言对应的单行注释字符串
	CString strsinglecomment=icrEditView->GetSingleCommentString(icrEditView->GetLanguage());  
	if(strsinglecomment.IsEmpty()) //若为空串表示当前没有进行语法关键字显示
		return;

	icrEditView->ShowWindow(SW_HIDE); 
	CString strtext=_T(""), strline;

	BOOL bpriorlinerealreturn;
	int linenumber = nendline - nfirstline + 1;

	for(int i=0; i<linenumber; i++) {
		if(nfirstline+i-1<0)//判断前一行行末是否是硬回车
			bpriorlinerealreturn = TRUE;
		else
			bpriorlinerealreturn = icrEditView->GetLineString(nfirstline+i-1, strline);
		icrEditView->GetLineString(nfirstline+i, strline);
		if(bpriorlinerealreturn || nfirstline==nendline) { //如果上一行是真的换行
			int nselstart = SynCtrl.LineIndex(nfirstline+i); 
			SynCtrl.SetSel(nselstart, nselstart); 
			int noldlinecount = SynCtrl.GetLineCount(); 
			SynCtrl.ReplaceSel(strsinglecomment, TRUE);
			int nnewlinecount = SynCtrl.GetLineCount();
			linenumber+=nnewlinecount-noldlinecount;
		}
	}

	int nselstart = SynCtrl.LineIndex(nfirstline); 
	int nselend =  SynCtrl.LineIndex(nfirstline+linenumber);
	SynCtrl.SetSel(nselstart, nselend); 
	icrEditView->ShowWindow(SW_SHOW);	
}

void CMainFrame::OnEditLcase() 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();
	CRichEditCtrl &edit = icrEditView->GetRichEditCtrl();
	CHARRANGE cr;
	edit.GetSel(cr); 
	CString strsel;
	EDITSTREAM stream;
	stream.dwCookie = (DWORD)&strsel;
	stream.pfnCallback = EditStreamCallbackOut;
	edit.StreamOut(SF_TEXT|SFF_SELECTION, stream);		
	
	strsel.MakeLower(); 
	edit.ReplaceSel(strsel, TRUE);	
	edit.SetSel(cr); 	
}

void CMainFrame::OnEditUcase() 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();
	CRichEditCtrl &edit = icrEditView->GetRichEditCtrl();
	CHARRANGE cr;
	edit.GetSel(cr); 

	CString strsel;
	EDITSTREAM stream;
	stream.dwCookie = (DWORD)&strsel;
	stream.pfnCallback = EditStreamCallbackOut;
	edit.StreamOut(SF_TEXT|SFF_SELECTION, stream);
	
	strsel.MakeUpper();
	edit.ReplaceSel(strsel, TRUE);	
	edit.SetSel(cr); 	
}

void CMainFrame::OnEditInvert() 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();
	CRichEditCtrl &edit = icrEditView->GetRichEditCtrl();
	CHARRANGE cr;
	edit.GetSel(cr); 
	CString strsel;
	EDITSTREAM stream;
	stream.dwCookie = (DWORD)&strsel;
	stream.pfnCallback = EditStreamCallbackOut;
	edit.StreamOut(SF_TEXT|SFF_SELECTION, stream);		
	
	for(int i=0; i<strsel.GetLength(); i++) {
		TCHAR ch = strsel[i]; 
		if( ch >='A' && ch <='Z' )
			strsel.SetAt(i, ch + 'a' - 'A'); 
		else if( ch >='a' && ch <='z' )
			strsel.SetAt(i, ch + 'A' - 'a'); 
	}
	edit.ReplaceSel(strsel, TRUE);	
	edit.SetSel(cr); 	
}

void CMainFrame::OnEditCapitalize() 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();
	CRichEditCtrl &edit = icrEditView->GetRichEditCtrl();
	CHARRANGE cr;
	edit.GetSel(cr); 
	CString strsel;
	EDITSTREAM stream;
	stream.dwCookie = (DWORD)&strsel;
	stream.pfnCallback = EditStreamCallbackOut;
	edit.StreamOut(SF_TEXT|SFF_SELECTION, stream);
    strsel.MakeLower(); 
    
    BOOL bIsChar = FALSE, bInString=FALSE;
    for(int i=0; i<strsel.GetLength(); i++) {
        TCHAR ch = strsel[i]; 
        if( ch >='a' && ch <='z' && !bIsChar) {
            strsel.SetAt(i, ch + 'A' - 'a'); 
        }
		if( (ch >='a' && ch <='z') || (ch >='A' && ch <='Z') )
			bIsChar = TRUE;			
		else
			bIsChar = FALSE;
	}
	edit.ReplaceSel(strsel, TRUE);	
	edit.SetSel(cr); 	
}

void CMainFrame::OnEditSentancecase() 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();
	CRichEditCtrl &edit = icrEditView->GetRichEditCtrl();
	CHARRANGE cr;
	edit.GetSel(cr); 
	CString strsel;
	EDITSTREAM stream;
	stream.dwCookie = (DWORD)&strsel;
	stream.pfnCallback = EditStreamCallbackOut;
	edit.StreamOut(SF_TEXT|SFF_SELECTION, stream);
    
	BOOL bDo = TRUE;
    for(int i=0; i<strsel.GetLength(); i++) {
        TCHAR ch = strsel[i]; 
		if(ch == 0xa)
			bDo = TRUE;
		if( ((ch >='a' && ch <='z') || (ch >='A' && ch <='Z')) && bDo) {
			if( ch >='A' && ch <='Z' )
				strsel.SetAt(i, ch + 'a' - 'A'); 
			else
				strsel.SetAt(i, ch + 'A' - 'a'); 
			bDo = FALSE;
		}
	}
	edit.ReplaceSel(strsel, TRUE);	
	edit.SetSel(cr); 		
}

void CMainFrame::OnEditInsertdatetime() 
{
	CDateTime dt;
	dt.DoModal();
}

void CMainFrame::OnEditInsertfile() 
{
	CRecentFileList list(1, _T("FileTypes"), _T("FileTypes #%d"), 255);
	CString strtmp, strtitle, strfilter=_T("");
	list.ReadList();
	for(int i=0;i<list.GetSize();i++) {
		strtmp=list[i];
		if(strtmp.IsEmpty())
			continue;
		strtmp=strtmp.Right(strtmp.GetLength()-3);
		int npos = strtmp.Find(_T("|*."));
		if(npos!=-1) {
			strtitle = strtmp.Left( npos );
			strtmp = strtmp.Right( strtmp.GetLength() - npos - 1 );
		}
		strfilter=strfilter + strtitle + _T("(") + strtmp + _T(")|") + strtmp + _T("|");
	}
	strfilter+=_T("*.*|*.*||");

	CWinApp *app = AfxGetApp();
	CFileDialog fd ( TRUE, _T(""), NULL, OFN_HIDEREADONLY, strfilter); 
	fd.m_ofn.nFilterIndex =  app->GetProfileInt( _T("InsertFile"), _T("nFilterIndex"), 0);
	fd.DoModal(); 
	app->WriteProfileInt( _T("InsertFile"), _T("nFilterIndex"), fd.m_ofn.nFilterIndex);
	strtmp = fd.GetPathName(); 
	if(strtmp.IsEmpty())
		return;

	strtmp = GetFileContext(strtmp);
	CIcrEditView *editview = (CIcrEditView *)GetActiveView();
	CRichEditCtrl& editctrl = editview->GetRichEditCtrl(); 
	editctrl.ReplaceSel( strtmp, TRUE ); 
	editctrl.SetFocus(); 	
}

CString CMainFrame::GetFileContext(CString strfile)
{
	CString str=_T("");;
	CFileException fe;
	CFile file;
	file.Open(strfile, CFile::modeRead, &fe);
	if(fe.m_cause != CFileException::none) {
		fe.ReportError();
		return  _T("");		
	}
	DWORD dwSize=file.GetLength(); 
	if(dwSize==0)
		return  _T("");		
	try {	
		LPSTR lpszContext=new TCHAR[1];
		file.ReadHuge(lpszContext, 1);
		if(*lpszContext==-1) {
			if(lpszContext!=NULL)
				delete lpszContext;
			LPWSTR lpsztext= new WCHAR[1];
			file.ReadHuge(lpsztext, 1);
			if(lpsztext!=NULL)
				delete lpsztext;
			lpsztext= new WCHAR[dwSize-1];
			DWORD dwRead=file.ReadHuge(lpsztext, dwSize-2);
			lpsztext[dwRead/2]=0;
			str=lpsztext;
			if(lpsztext!=NULL)
				delete lpsztext;
		}
		else {
			if(lpszContext!=NULL)
				delete lpszContext;
			lpszContext=new TCHAR[dwSize+2];
			file.Seek(0, CFile::begin);
			DWORD dwRead=file.ReadHuge(lpszContext, dwSize);
			file.Close(); 
			lpszContext[dwRead]='\0';
			str=lpszContext;
			if(lpszContext!=NULL)
				delete lpszContext;
		}
	}
	catch(...){}
	
	return str;
}


void CMainFrame::OnSelchangeComboFind() 
{
}


void CMainFrame::OnUpdateEditLcase(CCmdUI* pCmdUI) 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();
	CRichEditCtrl &editctrl=icrEditView->GetRichEditCtrl(); 
	CHARRANGE cr;
	editctrl.GetSel(cr);
	pCmdUI->Enable(cr.cpMin!=cr.cpMax); 	
}


void CMainFrame::OnUpdateEditInvert(CCmdUI* pCmdUI) 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();
	CRichEditCtrl &editctrl=icrEditView->GetRichEditCtrl(); 
	CHARRANGE cr;
	editctrl.GetSel(cr);
	pCmdUI->Enable(cr.cpMin!=cr.cpMax); 	
}

void CMainFrame::OnUpdateEditSentancecase(CCmdUI* pCmdUI) 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();
	CRichEditCtrl &editctrl=icrEditView->GetRichEditCtrl(); 
	CHARRANGE cr;
	editctrl.GetSel(cr);
	pCmdUI->Enable(cr.cpMin!=cr.cpMax); 		
}

void CMainFrame::OnUpdateEditUcase(CCmdUI* pCmdUI) 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();
	CRichEditCtrl &editctrl=icrEditView->GetRichEditCtrl(); 
	CHARRANGE cr;
	editctrl.GetSel(cr);
	pCmdUI->Enable(cr.cpMin!=cr.cpMax); 	
}

void CMainFrame::OnFileNew() 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();
	CRichEditCtrl &edit = icrEditView->GetRichEditCtrl();
	if(!m_strFileName.IsEmpty())
	{
		if(edit.GetModify())
		{
			if(MessageBox("This file has been modified, do you want to save it?", "", MB_YESNO|MB_ICONQUESTION)==IDYES)
			{
				SaveTheContext();
			}
		}
	}
	
	edit.SetWindowText("");
	m_strFileName = "";
	icrEditView->SetSynEditViewFont(icrEditView->GetSynEditViewFont());
}


void CMainFrame::OnFileSaveAs() 
{
	if(m_strFileName.IsEmpty())
	{
		CFileDialog fd ( FALSE, _T(""), NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, _T("*.*|*.*||")); 
		if(fd.DoModal()==IDCANCEL)
			return;
		m_strFileName = fd.GetPathName();
	}
	else
	{
		CString strFileName = m_strFileName;
		int nPos= strFileName.ReverseFind('\\');
		strFileName = strFileName.Right(strFileName.GetLength()-nPos-1);
		CFileDialog fd ( FALSE, "", NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, _T("*.*|*.*||")); 
		wsprintf(fd.m_ofn.lpstrFile, strFileName);

		if(fd.DoModal()==IDCANCEL)
			return;
		m_strFileName = fd.GetPathName();
	}

	SaveTheContext();	
}



void CMainFrame::OnFilesave() 
{
	if(m_strFileName.IsEmpty())
	{
		CFileDialog fd ( FALSE, _T(""), NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, _T("*.*|*.*||")); 
		if(fd.DoModal()==IDCANCEL)
			return;
		m_strFileName = fd.GetPathName();
	}

	SaveTheContext();	
}

void CMainFrame::OnUpdateEditCapitalize(CCmdUI* pCmdUI) 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();
	CRichEditCtrl &editctrl=icrEditView->GetRichEditCtrl(); 
	CHARRANGE cr;
	editctrl.GetSel(cr);
	pCmdUI->Enable(cr.cpMin!=cr.cpMax); 
	
}


void CMainFrame::OnClose() 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();
	CRichEditCtrl &edit = icrEditView->GetRichEditCtrl();
	if(edit.GetModify())
	{
		int nRet = MessageBox("This file has been modified, do you want to save it?", "", MB_YESNOCANCEL|MB_ICONQUESTION);
		if(nRet==IDYES)
		{
			if(!m_strFileName.IsEmpty())
			{
				SaveTheContext();
			}
			else
			{
				CFileDialog fd ( FALSE, _T(""), NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, _T("*.*|*.*||")); 
				if(fd.DoModal()==IDCANCEL)
					return;
				m_strFileName = fd.GetPathName();
				SaveTheContext();
			}
		}
		else if(nRet==IDCANCEL)
		{
			return;
		}
	}
	
	CFrameWnd::OnClose();
}

⌨️ 快捷键说明

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