📄 mweditctl.cpp
字号:
if(blockflag)
{
//MessageBox(transmis.Str);
COLORREF col=dc.GetBkColor();
ChangeBackColor(transmis.FirstCaret,transmis.LastCaret,col);
transmis.Str.Empty();
blockflag=0;
}
SetCaretPos(curCaret.CaretPos);
ShowCaret();
}
void CMWEditCtrl::Down()
{ m_bufferStrCopy=m_bufferStr.Left(m_bufferStr.GetLength());
curCaretCopy=curCaret;
if(curCaret.CaretPos.y<curGeneral.ColumnPosit[curCaret.GeneralLine])
{
curCaret.GeneralBufPos++;
curCaret.CharCount++;//若是回车如何处理
CString Sub=m_bufferStr.Mid(curCaret.GeneralBufPos-curCaret.CharCount,curCaret.CharCount);
curCaret.CaretPos.y=GetStrWid(Sub);
}
CClientDC dc(this);
if(blockflag)
{
//MessageBox(transmis.Str);
COLORREF col=dc.GetBkColor();
ChangeBackColor(transmis.FirstCaret,transmis.LastCaret,col);
transmis.Str.Empty();
blockflag=0;
}
SetCaretPos(curCaret.CaretPos);
ShowCaret();
}
void CMWEditCtrl::Left()
{
m_bufferStrCopy=m_bufferStr.Left(m_bufferStr.GetLength());
curCaretCopy=curCaret;
if(curCaret.GeneralLine>1)
{
//滚屏
//ergegegr44444444444444
curCaret.GeneralLine-=1;
curCaret.SCreenLine-=1;
curCaret.CaretPos.x-=m_fontHeight;
if(curCaret.SCreenLine<1)
{
curCaret.SCreenLine=1;
curCaret.CaretPos.x+=m_fontHeight;
SFLisGL--;
Move(SFLisGL);
}
curCaret.CharCount=0;
long FirstPos=0;
for(int i=1;i<curCaret.GeneralLine;i++)
FirstPos+=curGeneral.ColumnCount[i];
curCaret.GeneralBufPos=FirstPos;
CString Sub=m_bufferStr.Mid(FirstPos,curGeneral.ColumnCount[curCaret.GeneralLine]);
if(curGeneral.ColumnPosit[curCaret.GeneralLine]<curCaret.CaretPos.y)
{
curCaret.CaretPos.y=curGeneral.ColumnPosit[curCaret.GeneralLine];
curCaret.CharCount=curGeneral.ColumnCount[curCaret.GeneralLine];
curCaret.GeneralBufPos+=curCaret.CharCount;
CString Try=Sub.Right(1);
CString s=Enter.Left(1);
if(!s.Compare(Try))
{
curCaret.CharCount-=1;
curCaret.GeneralBufPos-=1;
}
}
else
{
CString SubString,SubString1;
long up,down;
int chcount=0;
SubString.Empty();
while(GetStrWid(SubString)<=curCaret.CaretPos.y)
{
SubString1=Sub.Left(1);
if(SubString.IsEmpty())
up=0;
else
up=GetStrWid(SubString);
SubString+=SubString1;
chcount+=1;
down=GetStrWid(SubString);
Sub=Sub.Right(Sub.GetLength()-1);
}//while
if((curCaret.CaretPos.y-up)<(down-curCaret.CaretPos.y))
{
curCaret.CaretPos.y=up;
curCaret.CharCount=chcount-1;
curCaret.GeneralBufPos+=curCaret.CharCount;
}
else
{
curCaret.CaretPos.y=down;
curCaret.CharCount=chcount;
curCaret.GeneralBufPos+=curCaret.CharCount;
}
}//else
//if g
}
// HideCaret();
CClientDC dc(this);
if(blockflag)
{
//MessageBox(transmis.Str);
COLORREF col=dc.GetBkColor();
ChangeBackColor(transmis.FirstCaret,transmis.LastCaret,col);
transmis.Str.Empty();
blockflag=0;
}
SetCaretPos(curCaret.CaretPos);
ShowCaret();
int maxline=0;
while(curGeneral.ColumnCount[maxline+1])
maxline++;
ShowScrollBar(SB_HORZ,TRUE);
if(maxline<=maxscreenline)
{
if(SFLisGL>1)
{
SFLisGL=1;
Move(SFLisGL);
GetCharPosFromCount(curCaret.GeneralBufPos);
curCaret=GetCharPositFromCount;
SetCaretPos(curCaret.CaretPos);
ShowCaret();
}
EnableScrollBar(SB_HORZ,ESB_DISABLE_BOTH);
}
else
{
EnableScrollBar(SB_HORZ,ESB_ENABLE_BOTH);
int minpos=0;
int maxpos=maxline-maxscreenline;
SetScrollRange(SB_HORZ,minpos,maxpos);
int curpos=SFLisGL;
if(SFLisGL==1)
curpos=0;
SetScrollPos(SB_HORZ,curpos);
}
}
void CMWEditCtrl::Right()
{
m_bufferStrCopy=m_bufferStr.Left(m_bufferStr.GetLength());
curCaretCopy=curCaret;
long judge=0;
int i=1;
while(curGeneral.ColumnCount[i]>0)
{
i++;
}
MaxLine=i-1;//求最大列号
for(int j=1;j<=curCaret.GeneralLine;j++)
judge+=curGeneral.ColumnCount[j];
if(curCaret.GeneralLine<MaxLine)//if(judge<m_bufferStr.GetLength())
{
//screenline<屏幕最大列;
curCaret.GeneralLine+=1;
curCaret.SCreenLine+=1;
curCaret.CharCount=0;
curCaret.CaretPos.x+=m_fontHeight;
curCaret.GeneralBufPos=judge;
if(curCaret.SCreenLine>maxscreenline)
{
curCaret.SCreenLine=maxscreenline;
curCaret.CaretPos.x-=m_fontHeight;
SFLisGL++;
Move(SFLisGL);
}
CString Sub=m_bufferStr.Mid(judge,curGeneral.ColumnCount[curCaret.GeneralLine]);
if(curGeneral.ColumnPosit[curCaret.GeneralLine]<curCaret.CaretPos.y)
{
curCaret.CaretPos.y=curGeneral.ColumnPosit[curCaret.GeneralLine];
curCaret.CharCount=curGeneral.ColumnCount[curCaret.GeneralLine];
curCaret.GeneralBufPos+=curCaret.CharCount;
CString Try=Sub.Right(1);
CString s=Enter.Left(1);
if(!s.Compare(Try))
{
curCaret.CharCount-=1;
curCaret.GeneralBufPos-=1;
}
}
else
{
CString SubString,SubString1;
long up,down;
int chcount=0;
while(GetStrWid(SubString)<=curCaret.CaretPos.y)
{
SubString1=Sub.Left(1);
if(SubString.IsEmpty())
up=0;
else
up=GetStrWid(SubString);
SubString+=SubString1;
chcount+=1;
down=GetStrWid(SubString);
Sub=Sub.Right(Sub.GetLength()-1);
}
if((curCaret.CaretPos.y-up)<(down-curCaret.CaretPos.y))
{
curCaret.CaretPos.y=up;
curCaret.CharCount=chcount-1;
curCaret.GeneralBufPos+=curCaret.CharCount;
}
else
{
curCaret.CaretPos.y=down;
curCaret.CharCount=chcount;
curCaret.GeneralBufPos+=curCaret.CharCount;
}
}//else
}
CClientDC dc(this);
if(blockflag)
{
//MessageBox(transmis.Str);
COLORREF col=dc.GetBkColor();
ChangeBackColor(transmis.FirstCaret,transmis.LastCaret,col);
transmis.Str.Empty();
blockflag=0;
}
SetCaretPos(curCaret.CaretPos);
ShowCaret();
int maxline=0;
while(curGeneral.ColumnCount[maxline+1])
maxline++;
ShowScrollBar(SB_HORZ,TRUE);
if(maxline<=maxscreenline)
{
if(SFLisGL>1)
{
SFLisGL=1;
Move(SFLisGL);
GetCharPosFromCount(curCaret.GeneralBufPos);
curCaret=GetCharPositFromCount;
SetCaretPos(curCaret.CaretPos);
ShowCaret();
}
EnableScrollBar(SB_HORZ,ESB_DISABLE_BOTH);
}
else
{
EnableScrollBar(SB_HORZ,ESB_ENABLE_BOTH);
int minpos=0;
int maxpos=maxline-maxscreenline;
SetScrollRange(SB_HORZ,minpos,maxpos);
int curpos=SFLisGL;
if(SFLisGL==1)
curpos=0;
SetScrollPos(SB_HORZ,curpos);
}
}
void CMWEditCtrl::End()
{ m_bufferStrCopy=m_bufferStr.Left(m_bufferStr.GetLength());
curCaretCopy=curCaret;
curCaret.CaretPos.y=curGeneral.ColumnPosit[curCaret.GeneralLine];
curCaret.GeneralBufPos-=(curCaret.CharCount-curGeneral.ColumnCount[curCaret.GeneralLine]);
int count=curGeneral.ColumnCount[curCaret.GeneralLine];
CString enter=Enter.Left(1);
CString ss=m_bufferStr.Mid(curCaret.GeneralBufPos-1,1);
if(!ss.Compare(enter))
{
curCaret.CharCount=count-1;
curCaret.GeneralBufPos-=1;
}
else
curCaret.CharCount=count;
CClientDC dc(this);
if(blockflag)
{
//MessageBox(transmis.Str);
COLORREF col=dc.GetBkColor();
ChangeBackColor(transmis.FirstCaret,transmis.LastCaret,col);
transmis.Str.Empty();
blockflag=0;
}
SetCaretPos(curCaret.CaretPos);
ShowCaret();
}
void CMWEditCtrl::Home()
{
//curCaret.CaretPos.x=
m_bufferStrCopy=m_bufferStr.Left(m_bufferStr.GetLength());
curCaretCopy=curCaret;
curCaret.CaretPos.y=0;
curCaret.GeneralBufPos-=curCaret.CharCount;
curCaret.CharCount=0;
CClientDC dc(this);
if(blockflag)
{
//MessageBox(transmis.Str);
COLORREF col=dc.GetBkColor();
ChangeBackColor(transmis.FirstCaret,transmis.LastCaret,col);
transmis.Str.Empty();
blockflag=0;
}
SetCaretPos(curCaret.CaretPos);
ShowCaret();
}
void CMWEditCtrl::Pageup()
{
curCaretCopy=curCaret;
m_bufferStrCopy=m_bufferStr.Left(m_bufferStr.GetLength());
SCROLLINFO info;
// GetScrollInfo(SB_HORZ,&info, SIF_ALL);
int curpos=SFLisGL;
info.nPage=maxscreenline-1;
int minpos=0;
if (curpos > minpos)
curpos = max(minpos, curpos - (int) info.nPage);
if(SFLisGL>maxscreenline-1)
{
SFLisGL-=(maxscreenline-1);
Move(SFLisGL);
if(curCaret.GeneralLine==(SFLisGL+maxscreenline-1))
{
// MessageBox(_T("zhang_gun_left"));
curCaret.SCreenLine=maxscreenline;
curCaret.CaretPos.x=(curCaret.SCreenLine-1)*m_fontHeight;
CreateSolidCaret(m_fontHeight-2,1);
SetCaretPos(curCaret.CaretPos);
ShowCaret();
}
}
else
if(SFLisGL>1)
{ SFLisGL=1;
Move(SFLisGL);
if(curCaret.GeneralLine<=maxscreenline)
{
curCaret.SCreenLine=curCaret.GeneralLine;
curCaret.CaretPos.x=(curCaret.SCreenLine-1)*m_fontHeight;
CreateSolidCaret(m_fontHeight-2,1);
SetCaretPos(curCaret.CaretPos);
ShowCaret();
}
}
SetScrollPos(SB_HORZ,curpos);
CClientDC dc(this);
if(blockflag)
{
//MessageBox(transmis.Str);
COLORREF col=dc.GetBkColor();
ChangeBackColor(transmis.FirstCaret,transmis.LastCaret,col);
transmis.Str.Empty();
blockflag=0;
}
}
void CMWEditCtrl::Pagedown()
{
curCaretCopy=curCaret;
m_bufferStrCopy=m_bufferStr.Left(m_bufferStr.GetLength());
SCROLLINFO info;
info.nPage=maxscreenline-1;
int curpos=SFLisGL;
int maxline=0;
while(curGeneral.ColumnCount[maxline+1])
maxline++;
int maxpos=maxline-maxscreenline;
if (curpos < maxpos)
curpos = min(maxpos, curpos + (int) info.nPage);
if((SFLisGL+2*maxscreenline-2)<maxline)
{
SFLisGL+=(maxscreenline-1);
Move(SFLisGL);
if(curCaret.GeneralLine==SFLisGL)
{
curCaret.SCreenLine=1;
curCaret.CaretPos.x=0;
CreateSolidCaret(m_fontHeight-2,1);
SetCaretPos(curCaret.CaretPos);
ShowCaret();
}
}
else
{
if((SFLisGL+maxscreenline-1)<maxline)
{
SFLisGL=maxline-maxscreenline+1;
Move(SFLisGL);
if((curCaret.GeneralLine<(SFLisGL+maxscreenline-1))&&(curCaret.GeneralLine>SFLisGL))
{
curCaret.SCreenLine=curCaret.GeneralLine-SFLisGL+1;
curCaret.CaretPos.x=(curCaret.SCreenLine-1)*m_fontHeight;
CreateSolidCaret(m_fontHeight-2,1);
SetCaretPos(curCaret.CaretPos);
ShowCaret();
}
}
}
SetScrollPos(SB_HORZ,curpos);
CClientDC dc(this);
if(blockflag)
{
//MessageBox(transmis.Str);
COLORREF col=dc.GetBkColor();
ChangeBackColor(transmis.FirstCaret,transmis.LastCaret,col);
transmis.Str.Empty();
blockflag=0;
}
}
void CMWEditCtrl::Delete()
{
curCaretCopy=curCaret;
m_bufferStrCopy=m_bufferStr.Left(m_bufferStr.GetLength());
int maxline=0;
while(curGeneral.ColumnCount[maxline+1])
maxline++;
if(blockflag)
{
curCaret=transmis.FirstCaret;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -