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

📄 mweditctl.cpp

📁 国际编码蒙文编辑器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
					  int t=1;
					  for(t;t<curCaret.GeneralLine;t++)
				        count+=curGeneral.ColumnCount[t];
			            curCaret.GeneralBufPos=count;
				 
				   }
				   else//SubStr不是回车
				   {
					  int n=SubStr.GetLength();
					  if((SubStr[0+0]<128)&&(SubStr[0+0]>20))//是一个字符
					  {//替换并处理蒙文
						 // MessageBox(SubStr);
//						  curCaretCopy=curCaret;
//						  m_bufferStrCopy=m_bufferStr.Left(m_bufferStr.GetLength());
						  m_bufferStr.Delete(curCaret.GeneralBufPos,1);
						  m_bufferStr.Insert(curCaret.GeneralBufPos,SubStr);
						  change=true;
					  }
					  else//
					  {//插入
//						  curCaretCopy=curCaret;
//						  m_bufferStrCopy=m_bufferStr.Left(m_bufferStr.GetLength());
					      m_bufferStr.Insert(curCaret.GeneralBufPos,SubStr);
					  }
					  CString  rightstr=m_bufferStr.Right(m_bufferStr.GetLength()-curCaret.GeneralBufPos);
                      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);
	 
					  }//if  all
		              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);
					  }//部分刷新]
				   if(!change)
		             curCaret.GeneralBufPos+=SubStr.GetLength();
				   else
				     curCaret.GeneralBufPos+=SubStr.GetLength();
                   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;
						 }
					  }
				   }
    
					  

				   }

					
				}//该县

		   
		   }//非现场
		   SubStr.Empty();
		}//非空
		else
		{	
		curCaret.CaretPos.x=curCaret.CaretPos.y=0;
	    curCaret.GeneralBufPos=0;
		curCaret.CharCount=0;
		curCaret.GeneralLine=1;
		curCaret.SCreenLine=1;

		for(int i=0;i<100;i++)
		{
			curGeneral.ColumnCount[i]=curGeneral.ColumnPosit[i]=0;
		}
		 CRect  BrushWin; 
		 BrushWin.left=m_left; 
		 BrushWin.right=m_right; 
         BrushWin.top=m_top;
         BrushWin.bottom=m_bottom;
		 dc.FillRect(BrushWin, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
		 if(!m_bufferStr.IsEmpty())
		 SubRePaint(curCaret,m_bufferStr);
         GetCharPosFromCount(cc);
		 curCaret=GetCharPositFromCount;
		}
	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);
	}
       
//	MessageBox(m_bufferStr,m_bufferStrCopy);
//	
}

void CMWEditCtrl::OnRButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
    
//	transmis.Str.Empty();


	COleControl::OnRButtonDown(nFlags, point);
}

void CMWEditCtrl::OnTopChanged() 
{
	// TODO: Add notification handler code

	SetModifiedFlag();
}

void CMWEditCtrl::OnBottomChanged() 
{
	// TODO: Add notification handler code

	SetModifiedFlag();
}

void CMWEditCtrl::OnLeftChanged() 
{
	// TODO: Add notification handler code

	SetModifiedFlag();
}

void CMWEditCtrl::OnRightChanged() 
{
	// TODO: Add notification handler code

	SetModifiedFlag();
}

void CMWEditCtrl::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos) 
{
	COleControl::OnWindowPosChanged(lpwndpos);
   

 
	m_top=0; 
	m_bottom=lpwndpos->cy;
	m_left=0; 
	m_right=lpwndpos->cx;
	WindowChangFlag=1;
	maxscreenline=(m_right-m_left-6)/m_fontHeight;
	Invalidate();
	// TODO: Add your message handler code here
	
}
void CMWEditCtrl::TestInt(int t,CString s)
{    
	    char nnn[10];
		CString nnnn;
		itoa(t,nnn,10);
		nnnn=(CString)nnn;
		MessageBox(s,nnnn);	
}
void CMWEditCtrl::BackColor(POINT p1,POINT p2,COLORREF col)
{   
	
     CClientDC  dc(this);
	//CPaintDC dc(this);
     dc.SetBkMode(TRANSPARENT); 
     CRect BrushWin;
     CBrush  m_Brush;
	 LOGBRUSH  SH;
	 SH.lbStyle=BS_SOLID;//BS_HOLLOW;
	 SH.lbColor=0x00ff0000;
	 SH.lbHatch=HS_VERTICAL;
	 m_Brush.CreateSolidBrush(col);
	 CBrush * pOldBrush=dc.SelectObject(&m_Brush);
     if(p1.x>p2.x)//保持p2较p1大
	 {
		 POINT p3=p1;
		 p1=p2;
		 p2=p3;
	 }
	 int maxline=0;
     while(curGeneral.ColumnCount[maxline+1])
		maxline++;
	 if((p2.x/m_fontHeight+SFLisGL)>maxline)
		 p2.x=maxline*m_fontHeight-1;
	 if(p2.x>p1.x)
	 {
	    
	    BrushWin.left=p1.x;         // 覆盖光标以下
	    BrushWin.right=p1.x+m_fontHeight;//一列的部分 
        BrushWin.top=p1.y;          //
        BrushWin.bottom=curGeneral.ColumnPosit[p1.x/m_fontHeight+SFLisGL]+3;//
	 	dc.FillRect(BrushWin, &m_Brush);
		long  wide=p1.x;
		while(wide+m_fontHeight<p2.x)
		{
            wide+=m_fontHeight;
			BrushWin.left=wide;         // 覆盖光标以下
	        BrushWin.right=wide+m_fontHeight;//一列的部分 
            BrushWin.top=0;          //
			BrushWin.bottom=curGeneral.ColumnPosit[wide/m_fontHeight+SFLisGL]+3;
           // FillRectangle(&BrushWin);
	        dc.FillRect(BrushWin, &m_Brush);//CBrush::FromHandle((HBRUSH)GetStockObject(Brush)));
		}//FILLED WITH CURRENT LINE
	 
    
		BrushWin.left=p2.x;         // 覆盖光标以下
	    BrushWin.right=p2.x+m_fontHeight;//一列的部分 
        BrushWin.top=0;          //
        BrushWin.bottom=p2.y;//
		dc.FillRect(BrushWin, &m_Brush);
	 	 
	 }
	 else
	 {
		BrushWin.left=p1.x;//覆盖当前列以后的部分
	    BrushWin.right=p1.x+m_fontHeight; //
        BrushWin.top=p1.y;              //
        BrushWin.bottom=p2.y;//
		dc.FillRect(BrushWin, &m_Brush);
	  
     }//FILLED  POSTLINE
	

	 dc.SelectObject(pOldBrush);
}
void CMWEditCtrl::ChangeBackColor(CMWEditCtrl::Caret c1,CMWEditCtrl::Caret c2,COLORREF col)
{

	
	HideCaret();
	Caret tempcaret;
	BackColor(c1.CaretPos,c2.CaretPos,col);
    long f=JudgeEdit(c1);//为得到向前回述后的光标 
	long bl;
	//CString me=m_bufferStr.Left(c2.GeneralBufPos-1,1);
	if((m_bufferStr[c2.GeneralBufPos-1]>=0x1800)&&(m_bufferStr[c2.GeneralBufPos-1]<=0x1900))
	     bl=BackwardM(c2.GeneralBufPos)+c2.GeneralBufPos;
	else
         bl=Backward(c2.GeneralBufPos)+c2.GeneralBufPos;
	CString brushstr=m_bufferStr.Left(bl);
	brushstr=brushstr.Right(bl-GetCharPositFromCount.GeneralBufPos);
    tempcaret=GetCharPositFromCount;
	tempcaret.SCreenLine=tempcaret.GeneralLine-SFLisGL+1;
	tempcaret.CaretPos.x=(tempcaret.SCreenLine-1)*m_fontHeight;
	SubRePaintb(tempcaret,brushstr);
	//MessageBox(brushstr);
   
}
void CMWEditCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
{

      curCaretCopy=curCaret;
	m_bufferStrCopy=m_bufferStr.Left(m_bufferStr.GetLength());
	HideCaret();
	CClientDC  dc(this);
	 int maxline=0;
     while(curGeneral.ColumnCount[maxline+1])
		maxline++;
	 if((point.x/m_fontHeight+SFLisGL)>maxline)
		 point.x=maxline*m_fontHeight-1;
	 
  if(blockflag)
   {
	   //MessageBox(transmis.Str);
 
	   COLORREF col=dc.GetBkColor();
       ChangeBackColor(transmis.FirstCaret,transmis.LastCaret,col);
	   
	   transmis.Str.Empty();
	   blockflag=0;
   }
  // m_bufferStrCopy=m_bufferStr.Left(m_bufferStr.GetLength());
//   curCaretCopy=curCaret;
   if(!m_bufferStr.IsEmpty())
   {
	    int i=1;
        while(curGeneral.ColumnCount[i]>0)
		{     
	          i++;
		}
	
        MaxLine=i-1;
 
	    curCaret.SCreenLine=point.x/m_fontHeight+1;
		curCaret.GeneralLine=curCaret.SCreenLine +SFLisGL-1;
        curCaret.CaretPos.x=(curCaret.SCreenLine-1)*m_fontHeight;
	
		long  First=0;
	    for(int t=1;t<curCaret.GeneralLine;t++)
            First+=curGeneral.ColumnCount[t];
	    CString Linestr=m_bufferStr.Mid(First,curGeneral.ColumnCount[curCaret.GeneralLine]);
        //int nSub;
	    CString Getchars;
	    long wid=GetStrWid(Linestr);
        int  len=Linestr.GetLength();
	    if(wid<point.y)
		{
		    curCaret.CaretPos.y=curGeneral.ColumnPosit[curCaret.GeneralLine];
	        CString  Try=Linestr.Right(1);
		    CString  s=Enter.Left(1);
		    if(!Try.Compare(s))
			{ 
				curCaret.CharCount=len-1;//本列除去回车留下的部分
			 
			}
			else
			    curCaret.CharCount=len;
		    curCaret.GeneralBufPos=First+curCaret.CharCount;
        
		}
	    else
		{
		    while(wid>point.y)
			{   
			    len-=1;
			    Linestr=Linestr.Left(len);
			    wid=GetStrWid(Linestr);
			}
		    curCaret.CaretPos.y=wid;
	        curCaret.CharCount=len;
		    curCaret.GeneralBufPos=First+len;
		}
   }
  
   if(!firstflag)
   {
	   firstcurCaret=curCaret;
       firstflag=1;
   }
   CreateSolidCaret(m_fontHeight-2,1); 
   SetCaretPos(curCaret.CaretPos);
   ShowCaret();
   COleControl::OnLButtonDown(nFlags, point);
}
void CMWEditCtrl::mystrout(CMWEditCtrl::Caret caret,int column)
{  
}
void CMWEditCtrl::SubRePaint(CMWEditCtrl::Caret caret,CString str)

{   //负责重画

	CClientDC  dc(this);
	//CPaintDC dc(this);
//	dc.SetBkColor(0x00ffffff);
    dc.SetBkMode(TRANSPARENT); 
	Font(2700,_T("Times New Roman"));
	CFont* pOldFont=dc.SelectObject(&MyFont);
 	long  count=str.GetLength();//的重画串长
 
    CString space=' ';//取试串
	int     spacewid=dc.GetTextExtent(space,1).cx;//空格宽
	CString Try;
	int     nSub=1;//判断英:汉 
//	int     charwid;//一个字符宽
	long     wordwid=0; //字宽
	int     wordlen=0;//一个字所占字符数
	CString word;//一个字
	CString ch;
	long     charwid=0;
	
	while(count>0)
	{  
		
		Try=str.Left(1);
	 
		if(((Try[0]<128)&&(Try[0]>20))||((Try[0]>=0x1800)&&(Try[0]<=0x1900)))//英文或字符
		{          
		 // MessageBox(_T("mengwen"));
		  ch=str.Left(1);
	 
          if((ch[0]!=32)&&((ch[0]<128)&&(ch[0]>20)))//是字母
		  {
			  
			  if((!word.IsEmpty())&&(word[0]>=0x1800))
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -