📄 mweditctl.cpp
字号:
GetCharPosFromCount(curCaret.GeneralBufPos);
curCaret=GetCharPositFromCount;
m_bufferStr.Delete(transmis.FirstCaret.GeneralBufPos,transmis.Str.GetLength());
transmis.Str.Empty();
blockflag=0;
for(int i=0;i<100;i++)
{
curGeneral.ColumnCount[i]=curGeneral.ColumnPosit[i]=0;
}
SubRePaintc(zero,m_bufferStr);
if(curCaret.GeneralLine<SFLisGL)
SFLisGL=curCaret.GeneralLine;
if(curCaret.GeneralLine>(SFLisGL+maxscreenline-1))
SFLisGL=curCaret.GeneralLine-maxscreenline+1;
// MessageBox(m_bufferStr);
Move(SFLisGL);
curCaret.SCreenLine=curCaret.GeneralLine-SFLisGL+1;
curCaret.CaretPos.x=(curCaret.SCreenLine-1)*m_fontHeight;
// }
}//有块
else
{
int a=1;
CClientDC dc(this);
dc.SetBkMode(TRANSPARENT);
CFont* pOldFont=dc.SelectObject(&MyFont);
COLORREF col=dc.GetBkColor();
if(curCaret.GeneralBufPos<m_bufferStr.GetLength())//||blockflag)
{
HideCaret();
int tt;
// curCaretCopy=curCaret;
// m_bufferStrCopy=m_bufferStr.Left(m_bufferStr.GetLength());
m_bufferStr.Delete(curCaret.GeneralBufPos,1);
bool redrawflag=JudgeEdit(curCaret);
if(redrawflag)//all redraw
{
POINT p1;
p1.x=m_right;
p1.y=m_bottom;
BackColor(GetCharPositFromCount.CaretPos,p1,col);
curGeneral.ColumnCount[GetCharPositFromCount.GeneralLine]=GetCharPositFromCount.CharCount;
curGeneral.ColumnPosit[GetCharPositFromCount.GeneralLine]=GetCharPositFromCount.CaretPos.y;
tt=GetCharPositFromCount.GeneralLine+1;
while(tt<100)
{
curGeneral.ColumnCount[tt]=0;
curGeneral.ColumnPosit[tt]=0;
tt++;
}
CString afternewcaretstr1=m_bufferStr.Right(m_bufferStr.GetLength()-GetCharPositFromCount.GeneralBufPos);
SubRePaint(GetCharPositFromCount,afternewcaretstr1);
// CString s1s="all";
// MessageBox(s1s);
}
else
{
POINT p2;
p2.x=(allLine-1)*m_fontHeight;
p2.y=m_bottom;
BackColor(GetCharPositFromCount.CaretPos,p2,col);
long count=0;
int t=GetCharPositFromCount.GeneralLine;
while(t<=allLine)
{
count+=curGeneral.ColumnCount[t];
t++;
}
//TestInt(allLine,m_bufferStr);
count-=(GetCharPositFromCount.CharCount+a);
curGeneral.ColumnCount[GetCharPositFromCount.GeneralLine]=GetCharPositFromCount.CharCount;
curGeneral.ColumnPosit[GetCharPositFromCount.GeneralLine]=GetCharPositFromCount.CaretPos.y;
tt=GetCharPositFromCount.GeneralLine+1;
while(tt<=allLine)
{ curGeneral.ColumnCount[tt]=0;
curGeneral.ColumnPosit[tt]=0;
tt++;
}
CString afternewcaretstr2=m_bufferStr.Mid(GetCharPositFromCount.GeneralBufPos,count);
//TestInt(count,afternewcaretstr2);
SubRePaint(GetCharPositFromCount,afternewcaretstr2);
//CString s2s="part";
//MessageBox(s2s);
}
CString space1=m_bufferStr.Mid(curCaret.GeneralBufPos-1,1);
CString space=' ';//取试串
CString space2=space.Left(1);
GetCharPosFromCount(curCaret.GeneralBufPos);
curCaret=GetCharPositFromCount;
if(curCaret.GeneralLine<SFLisGL)//||)
{
SFLisGL=curCaret.GeneralLine;
Move(SFLisGL);
curCaret.CaretPos.x=0;
curCaret.SCreenLine=1;
}
else
{
if(curCaret.GeneralLine>(SFLisGL+maxscreenline-1))
{
SFLisGL=curCaret.GeneralLine-maxscreenline+1;
Move(SFLisGL);
curCaret.CaretPos.x=(maxscreenline-1)*m_fontHeight;
curCaret.SCreenLine=maxscreenline;
}
else
{
if(SFLisGL>1)
{
Move(SFLisGL);
curCaret.SCreenLine=curCaret.GeneralLine-SFLisGL+1;
curCaret.CaretPos.x=(curCaret.SCreenLine-1)*m_fontHeight;
}
}
}
}
}//else 删一个
CreateSolidCaret(m_fontHeight-2,1);
SetCaretPos(curCaret.CaretPos);
ShowCaret();
// TestInt(maxline,"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::Backup()
{
CClientDC dc(this);
curCaretCopy=curCaret;
m_bufferStrCopy=m_bufferStr.Left(m_bufferStr.GetLength());
bool moveline=false;
dc.SetBkMode(TRANSPARENT);
// CFont* pOldFont=dc.SelectObject(&MyFont);
if(curCaret.GeneralBufPos>0)
{
HideCaret();
if(blockflag==1)
{
curCaret=transmis.FirstCaret;
m_bufferStr.Delete(transmis.FirstCaret.GeneralBufPos,transmis.Str.GetLength());
transmis.Str.Empty();
blockflag=0;
}
else
{
CString str=m_bufferStr.Right(m_bufferStr.GetLength()-curCaret.GeneralBufPos);
curCaretCopy=transmis.FirstCaret;
curCaret.GeneralBufPos-=1;
TCHAR ch=m_bufferStr.GetAt(curCaret.GeneralBufPos);
m_bufferStrCopy=m_bufferStr.Left(m_bufferStr.GetLength());
m_bufferStr.Delete(curCaret.GeneralBufPos,1);
if(curCaret.CaretPos.y>0)
curCaret.CharCount-=1;
else
{
curCaret.CaretPos.x-=m_fontHeight;
curCaret.GeneralLine-=1;
//公平
curCaret.SCreenLine-=1;
if(ch!=0x000d)
curCaret.CharCount=curGeneral.ColumnCount[curCaret.GeneralLine]-1;
else
curCaret.CharCount=curGeneral.ColumnCount[curCaret.GeneralLine];
}
int Fir=0;
for(int i=1;i<curCaret.GeneralLine;i++)
Fir+=curGeneral.ColumnCount[i];
CString str1=m_bufferStr.Mid(Fir,curCaret.CharCount);
// MessageBox(str1);
curCaret.CaretPos.y=GetStrWid(str1);
} // TestInt(curCaret.CaretPos.y,"y");
bool all=Judge2(curCaret);
storeCaret=GetCharPositFromCount;
if(all)
{
COLORREF col=dc.GetBkColor();
POINT p1,p2;
p1.x=storeCaret.CaretPos.x;
p1.y=storeCaret.CaretPos.y;
p2.x=m_right;
p2.y=m_bottom;
BackColor(p1,p2,col);
for(int i=storeCaret.GeneralLine;i<100;i++)
{
curGeneral.ColumnCount[i]=0;
curGeneral.ColumnPosit[i]=0;
}
int Fir2=0;
for(i=1;i<storeCaret.GeneralLine;i++)
Fir2+=curGeneral.ColumnCount[i];
CString str2=m_bufferStr.Mid(Fir2,storeCaret.CharCount);
curGeneral.ColumnCount[storeCaret.GeneralLine]=storeCaret.CharCount;
curGeneral.ColumnPosit[storeCaret.GeneralLine]=GetStrWid(str2);
SubRePaint(storeCaret,storeStr);
}
else
{
COLORREF col=dc.GetBkColor();
POINT p1,p2;
p1.x=storeCaret.CaretPos.x;
p1.y=storeCaret.CaretPos.y;
p2.x=(allLine-1)*m_fontHeight;
p2.y=m_bottom;
BackColor(p1,p2,col);
for(int i=storeCaret.GeneralLine;i<allLine;i++)
{
curGeneral.ColumnCount[i]=0;
curGeneral.ColumnPosit[i]=0;
}
int Fir2=0;
for(i=1;i<storeCaret.GeneralLine;i++)
Fir2+=curGeneral.ColumnCount[i];
CString str2=m_bufferStr.Mid(Fir2,storeCaret.CharCount);
curGeneral.ColumnCount[storeCaret.GeneralLine]=storeCaret.CharCount;
curGeneral.ColumnPosit[storeCaret.GeneralLine]=GetStrWid(str2);
int Fir3=0;
for(i=(allLine+1);i<100;i++)
Fir3+=curGeneral.ColumnCount[i];
CString storeStr2=storeStr.Left(storeStr.GetLength()-Fir3);
SubRePaint(storeCaret,storeStr2);
}
GetCharPosFromCount(curCaret.GeneralBufPos);
curCaret=GetCharPositFromCount;
if(curCaret.GeneralLine<SFLisGL)//curCaret.GeneralLine<SFLisGL)
{
SFLisGL=curCaret.GeneralLine;
Move(SFLisGL);
curCaret.CaretPos.x=0;
curCaret.SCreenLine=1;
}
else
{
if(SFLisGL)
{
Move(SFLisGL);
curCaret.SCreenLine=curCaret.GeneralLine-SFLisGL+1;
curCaret.CaretPos.x=(curCaret.SCreenLine-1)*m_fontHeight;
}
}
}
CreateSolidCaret(m_fontHeight-2,1);
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);
}
}
long CMWEditCtrl::GetStrWid(CString str)
{
CClientDC dc(this);
dc.SetBkMode(TRANSPARENT);
// CFont* pOldFont=dc.SelectObject(&MyFont);
CString s1=Enter.Left(1);
CString s2=str.Right(1);
long n;
n=str.GetLength();
if(!s1.Compare(s2))
{
n--;
}
if(n)
str=str.Left(n);
else
return 0;
long Wide=0;
CString Try;
CString tempstr;
while(n>0)
{
tempstr=str.Left(1);
n--;
if(tempstr[0]>0x1900)
{
Font(0,_T("Times New Roman"));
dc.SelectObject(&MyFont);
Wide+=dc.GetTextExtent(tempstr,1).cy;
}
else
{
Font(2700,_T("Times New Roman"));
dc.SelectObject(&MyFont);
Wide+=dc.GetTextExtent(tempstr,1).cx;
}
str=str.Right(n);
}
return Wide;
}
long CMWEditCtrl::GetStrWidH(CString str)
{
CClientDC dc(this);
dc.SetBkMode(TRANSPARENT);
CFont* pOldFont=dc.SelectObject(&MyFont);
CString s1=Enter.Left(1);
CString s2=str.Right(1);
long n;
n=str.GetLength();
if(!s1.Compare(s2))
{
n--;
}
if(n)
str=str.Left(n);
else
return 0;
long Wide=0;
CString Try;
CString tempstr;
while(n>0)
{
tempstr=str.Left(1);
n--;
str=str.Right(n);
Wide+=dc.GetTextExtent(tempstr,1).cy;
}
return Wide;
}
long CMWEditCtrl::Forward(CString str)
{
CString Try;
int t=0;
int n=str.GetLength();
while(n)
{
Try=str.Right(1);
str=str.Left(str.GetLength()-1);
if((Try[0]<128)&&(Try[0]>20)&&(Try[0]!=32))
{ t++;
n--;
}
else
break;
}
return t;
}
long CMWEditCtrl::ForwardM(CString str)
{
CString Try;
int t=0;
int n=str.GetLength();
while(n)
{
Try=str.Right(1);
str=str.Left(str.GetLength()-1);
if(MW(Try))
{ t++;
n--;
}
else
break;
}
return t;
}
long CMWEditCtrl::Backward(long l)
{
CString Try;
long t=0;
long b=m_bufferStr.GetLength();
//int n=str.GetLength();
while(l<b)
{
Try=m_bufferStr.Mid(l,1);
//str=str.Right(str.GetLength()-1);
if((Try[0]<128)&&(Try[0]>20)&&(Try[0]!=32))
{
t++;
l++;
}
else
break;
}
return t;
}
long CMWEditCtrl::BackwardM(long l)
{
CString Try;
long t=0;
long b=m_bufferStr.GetLength();
//int n=str.GetLength();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -