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