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

📄 mweditctl.cpp

📁 国际编码蒙文编辑器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	      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 + -