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

📄 mainfrm.cpp

📁 VC++设计语法编辑器
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			
			OnEditrepeat();
			if(t)
				delete t;
			if(ft)
				delete ft;
			return;
		}
	}
	if(t)
		delete t;
	if(ft)
		delete ft;
}

void CMainFrame::OnEditrepeatnext() 
{
	CWinApp *app = AfxGetApp();
	CMainFrame *mainfrm = (CMainFrame *)AfxGetMainWnd();
	CIcrEditView *icrEditView=(CIcrEditView *)GetActiveView(); 

	CString strEdit;
	mainfrm->m_wndToolBar.m_comboboxFind.GetWindowText(strEdit);
	//CString strEdit = app->GetProfileString(_T("CFind"), _T("str"), _T(""));
	BOOL bWholeWord = app->GetProfileInt(_T("CFind"), _T("WholeWord"), 0);	
	BOOL bCase = app->GetProfileInt(_T("CFind"), _T("Case"), 0);	
	
	if(strEdit.IsEmpty())
		return;

	int dwFlags = 0;
	if(bCase)
		dwFlags|=FR_MATCHCASE;
	if(bWholeWord)
		dwFlags|=FR_WHOLEWORD;
	dwFlags|=FR_DOWN;;

	CRichEditCtrl &edit = icrEditView->GetRichEditCtrl(); 
	CHARRANGE cr;
	edit.GetSel(cr); 
	FINDTEXTEX *ft = new FINDTEXTEX[1];
	ft->chrg.cpMin = cr.cpMin+1; 
	ft->chrg.cpMax = -1;// search through end of the text 
	
	TCHAR *t = new TCHAR[strEdit.GetLength()+1];
	strcpy(t, strEdit);
	ft->lpstrText = t;
	
	mainfrm->m_wndToolBar.m_comboboxFind.AddToMRU(strEdit); 
	app->WriteProfileString(_T("CFind"), _T("str"), strEdit);	
	
	icrEditView->ShowWindow(SW_HIDE); 
	int nPos = edit.SendMessage(EM_FINDTEXTEX, dwFlags, (LPARAM)ft); 
	
	if(nPos!=-1) {
		
		edit.SetSel(ft->chrgText.cpMin, ft->chrgText.cpMax); 
		icrEditView->SetFocus(); 
		SetFocus();
		icrEditView->ShowWindow(SW_SHOW);
	}
	else {
		icrEditView->ShowWindow(SW_SHOW);
		CString strShow;
		strShow.Format(_T("Cannot find the string: \"%s\", search again from the beginning?"), strEdit);
		if(MessageBox(strShow, _T("Find"), MB_ICONINFORMATION|MB_YESNO)==IDYES)
		{
			edit.SetSel(0, 0); 			
			OnEditrepeatnext();
			if(t)
				delete t;
			if(ft)
				delete ft;
			return;
		}
	}	
	if(t)
		delete t;
	if(ft)
		delete ft;
}

void CMainFrame::OnUpdateEditrepeat(CCmdUI* pCmdUI) 
{
	CString strEdit;
	m_wndToolBar.m_comboboxFind.GetWindowText(strEdit);
	pCmdUI->Enable(!strEdit.IsEmpty()); 
}

void CMainFrame::OnUpdateEditrepeatnext(CCmdUI* pCmdUI) 
{
	CString strEdit;
	m_wndToolBar.m_comboboxFind.GetWindowText(strEdit);
	pCmdUI->Enable(!strEdit.IsEmpty()); 
}

void CMainFrame::OnEditreplace() 
{
	if(!m_pReplaceDialog)
		m_pReplaceDialog = new CReplace(this);
	else
	{
		m_pReplaceDialog->ShowWindow(SW_SHOW);
		m_pReplaceDialog->SetFocus();
		return;
	}
	m_pReplaceDialog->Create(IDD_REPLACE, this);
	m_pReplaceDialog->ShowWindow(SW_SHOW);
	return;		
}

void CMainFrame::OnViewFont() 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();
	CRichEditCtrl &edit = icrEditView->GetRichEditCtrl();
	BOOL bModify = edit.GetModify();
	edit.ShowWindow(SW_HIDE);
	
	CString strText;
	EDITSTREAM stream;
	stream.dwCookie = (DWORD)&strText;
	stream.pfnCallback = EditStreamCallbackOut;
	edit.StreamOut(SF_TEXT, stream);
	
	CHARFORMAT cr;
	
	if(strText.IsEmpty())
	{
		strText = _T(" ");
		edit.SetSel(0, 1);
		cr = icrEditView->GetCharFormatSelection();
		edit.SetSel(0, 0); 
	}
	else
	{
		CHARRANGE range;
		edit.GetSel(range);
		int ntemp;
		if(range.cpMax < range.cpMin)
		{
			ntemp = range.cpMax;
			range.cpMax = range.cpMin;
			range.cpMin = ntemp;
		}

		if(range.cpMax == range.cpMin)
		{
			if(range.cpMin == 0)
			{
				edit.SetSel(0, 1);
			}
			else
			{
				edit.SetSel(range.cpMin-1, range.cpMin);
			}
			
			cr = icrEditView->GetCharFormatSelection();
			edit.SetSel(range.cpMin, range.cpMin);
		}
		else
		{
			cr = icrEditView->GetCharFormatSelection();
		}
	}

	edit.ShowWindow(SW_SHOW);
	
	CFontDialog dlg(cr, CF_BOTH|CF_NOOEMFONTS);
	
	if (dlg.DoModal() == IDOK)
	{		
		CHARFORMAT cr;
		dlg.GetCharFormat(cr);
		LockWindowUpdate();
		
		icrEditView->SetWindowText(_T(""));
		
		icrEditView->SetSynEditViewFont(*dlg.m_cf.lpLogFont);
		icrEditView->SetWindowText(strText);		
		
		edit.SetModify(bModify);
		UnlockWindowUpdate();
	}	
}

void CMainFrame::SaveTheContext()
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();
	CRichEditCtrl &richctrl=icrEditView->GetRichEditCtrl();
	
	if(0 == m_strFileName.GetLength())
		return;

	CFile cFile(m_strFileName, CFile::modeCreate|CFile::modeWrite);
	EDITSTREAM es;
	es.dwCookie = (DWORD) &cFile;
	es.pfnCallback = EditStreamCallbackWriteToFile; 
	richctrl.StreamOut(SF_TEXT, es);
	richctrl.SetModify(FALSE); 
}


void CMainFrame::OnFileOpen() 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();
	CRichEditCtrl &edit = icrEditView->GetRichEditCtrl();
	if(edit.GetModify())
	{
		if(MessageBox("This file has been modified, do you want to save it?", "", MB_YESNO|MB_ICONQUESTION)==IDNO)
		{
			return;
		}
	}
	
	CFileDialog fd (TRUE, _T(""), NULL, OFN_HIDEREADONLY|OFN_EXPLORER, "*.*|*.*||"); 
	if(IDCANCEL == fd.DoModal())
	{
		return;
	}
	
	m_strFileName = fd.GetPathName();
	icrEditView->LoadFile(m_strFileName);
}


void CMainFrame::OnEditTrimtraillingspace() 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();

	CWaitCursor wc;

	CRichEditCtrl &edit = icrEditView->GetRichEditCtrl();
	int nfirstline = edit.GetFirstVisibleLine(); 
	CHARRANGE cr;
	edit.GetSel(cr);
	int nline = edit.LineFromChar(cr.cpMin);  

	CString strtext;
	EDITSTREAM stream;
	stream.dwCookie = (DWORD)&strtext;
	stream.pfnCallback = EditStreamCallbackOut;
	edit.StreamOut(SF_TEXT, stream);

	CString strnewtext = _T(""), strline;
	int npos = strtext.Find('\n');
	while(npos!=-1) {
		strline = strtext.Left(npos-1);
		strline.TrimRight(0x20);
		strline += '\n';
		strtext = strtext.Right(strtext.GetLength()-npos-1); 
		strnewtext += strline;
		npos = strtext.Find('\n');
	}

	icrEditView->LoadText(strnewtext);
	icrEditView->GotoLine(nfirstline+1); 
	int nlineindex = edit.LineIndex(nline); 
	edit.SetSel(nlineindex, nlineindex); 
	icrEditView->ShowCursorPosition(); 
	icrEditView->SetFocus(); 
	SaveTheContext();
}

void CMainFrame::OnEditTrimtraillingtab() 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();

	CWaitCursor wc;

	CRichEditCtrl &edit = icrEditView->GetRichEditCtrl();
	int nfirstline = edit.GetFirstVisibleLine(); 
	CHARRANGE cr;
	edit.GetSel(cr);
	int nline = edit.LineFromChar(cr.cpMin);  

	CString strtext;
	EDITSTREAM stream;
	stream.dwCookie = (DWORD)&strtext;
	stream.pfnCallback = EditStreamCallbackOut;
	edit.StreamOut(SF_TEXT, stream);

	CString strnewtext = _T(""), strline;
	int npos = strtext.Find('\n');
	while(npos!=-1) {
		strline = strtext.Left(npos-1);
		strline.TrimRight(0x9);
		strline += '\n';
		strtext = strtext.Right(strtext.GetLength()-npos-1); 
		strnewtext += strline;
		npos = strtext.Find('\n');
	}

	icrEditView->LoadText(strnewtext);
	icrEditView->GotoLine(nfirstline+1); 
	int nlineindex = edit.LineIndex(nline); 
	edit.SetSel(nlineindex, nlineindex); 
	icrEditView->ShowCursorPosition(); 
	icrEditView->SetFocus(); 
	SaveTheContext();	
}

void CMainFrame::OnEditTabtospace() 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();

	CWaitCursor wc;
	TCHAR chr = 0x9;
	CString strtab = chr;
	int ntabsize = icrEditView->GetTabSize(); 
	CString strspace(0x20, ntabsize);

	CRichEditCtrl &edit = icrEditView->GetRichEditCtrl();
	int nfirstline = edit.GetFirstVisibleLine(); 
	CHARRANGE cr;
	edit.GetSel(cr);
	int nline = edit.LineFromChar(cr.cpMin);  

	CString strtext;
	EDITSTREAM stream;
	stream.dwCookie = (DWORD)&strtext;
	stream.pfnCallback = EditStreamCallbackOut;
	edit.StreamOut(SF_TEXT, stream);

	strtext.Replace(strtab, strspace); 
	icrEditView->LoadText(strtext);
	icrEditView->GotoLine(nfirstline+1); 
	int nlineindex = edit.LineIndex(nline); 
	edit.SetSel(nlineindex, nlineindex); 
	icrEditView->ShowCursorPosition(); 
	icrEditView->SetFocus(); 
	SaveTheContext();	
}

void CMainFrame::OnEditSpacetotab() 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();

	CWaitCursor wc;
	TCHAR chr = 0x9;
	CString strtab = chr;
	int ntabsize = icrEditView->GetTabSize(); 
	CString strspace(0x20, ntabsize);

	CRichEditCtrl &edit = icrEditView->GetRichEditCtrl();
	int nfirstline = edit.GetFirstVisibleLine(); 
	CHARRANGE cr;
	edit.GetSel(cr);
	int nline = edit.LineFromChar(cr.cpMin);  

	CString strtext;
	EDITSTREAM stream;
	stream.dwCookie = (DWORD)&strtext;
	stream.pfnCallback = EditStreamCallbackOut;
	edit.StreamOut(SF_TEXT, stream);

	strtext.Replace(strspace, strtab); 
	icrEditView->LoadText(strtext);
	icrEditView->GotoLine(nfirstline+1); 
	int nlineindex = edit.LineIndex(nline); 
	edit.SetSel(nlineindex, nlineindex); 
	icrEditView->ShowCursorPosition(); 
	icrEditView->SetFocus(); 
	SaveTheContext();	
}

void CMainFrame::OnEditLeadingspacetotab() 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();

	CWaitCursor wc;
	int ntabsize = icrEditView->GetTabSize(); 
	CString strspace(0x20, ntabsize);

	CRichEditCtrl &edit = icrEditView->GetRichEditCtrl();
	int nfirstline = edit.GetFirstVisibleLine(); 
	CHARRANGE cr;
	edit.GetSel(cr);
	int nline = edit.LineFromChar(cr.cpMin);  

	CString strtext;
	EDITSTREAM stream;
	stream.dwCookie = (DWORD)&strtext;
	stream.pfnCallback = EditStreamCallbackOut;
	edit.StreamOut(SF_TEXT, stream);

	CString strnewtext = _T(""), strline;
	int npos = strtext.Find('\n');
	while(npos!=-1) {
		int i=0;
		strline = strtext.Left(npos);
		while(strline[i]==0x20 || strline[i]==0x9)
			i++;
		CString strtmp = strline.Left(i); 
		strtmp.Replace( strspace, _T("\t"));
		strline = strtmp + strline.Right(strline.GetLength()-i); 
		strline += '\n';

		strtext = strtext.Right(strtext.GetLength()-npos-1); 
		strnewtext += strline;
		npos = strtext.Find('\n');
	}

	icrEditView->LoadText(strnewtext);
	icrEditView->GotoLine(nfirstline+1); 
	int nlineindex = edit.LineIndex(nline); 
	edit.SetSel(nlineindex, nlineindex); 
	icrEditView->ShowCursorPosition(); 
	icrEditView->SetFocus(); 	
	SaveTheContext();	
}

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

	int nfirstline, nendline;
	icrEditView->GetSelLine(nfirstline, nendline);
	
	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(_T("\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::OnEditMoveleft() 
{
	CIcrEditView *icrEditView = (CIcrEditView *)GetActiveView();
	CRichEditCtrl &SynCtrl = icrEditView->GetRichEditCtrl(); 
	icrEditView->ShowWindow(SW_HIDE); 

	int nfirstline, nendline;
	icrEditView->GetSelLine(nfirstline, nendline);
	
	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);
			if(strline.Left(1)==_T("\t")) {
				SynCtrl.SetSel(nselstart, nselstart+1);
				SynCtrl.ReplaceSel(_T(""), TRUE); //替换后可能引总行数减少
			}
			else {
				if(strline!=_T(" ")) { //之所以有此判断是因为如果是空行icrEditView->GetLineString会返回一个空格

⌨️ 快捷键说明

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