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

📄 mweditctl.cpp

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