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

📄 viewwnd.cpp

📁 又VC++实现的基于TWAIN的扫描仪图像输入处理软件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			Rect.left=m_SelectZoom.left;
			Rect.right=m_SelectZoom.right;
			Rect.bottom=m_SelectZoom.bottom;
		}
		//左边中心
        else if((point.x*(pData->m_nZoomFactor)+nPos1)>(m_SelectZoom.left-8)&&(point.x*(pData->m_nZoomFactor)+nPos1)<(m_SelectZoom.left+8)&&
			(point.y*(pData->m_nZoomFactor)+nPos2)>((m_SelectZoom.top+m_SelectZoom.bottom)/2-m/4)&&(point.y*(pData->m_nZoomFactor)+nPos2)<((m_SelectZoom.bottom+m_SelectZoom.top)/2+m/4))
		{
			V=TRUE;

			Rect.top=m_SelectZoom.top;
			Rect.left=m_SelectZoom.right;
			Rect.bottom=m_SelectZoom.bottom;
			Rect.right=m_SelectZoom.left;
		}
		//右边中心
        else if((point.x*(pData->m_nZoomFactor)+nPos1)>(m_SelectZoom.right-8)&&(point.x*(pData->m_nZoomFactor)+nPos1)<(m_SelectZoom.right+8)&&
			(point.y*(pData->m_nZoomFactor)+nPos2)>((m_SelectZoom.top+m_SelectZoom.bottom)/2-m/4)&&(point.y*(pData->m_nZoomFactor)+nPos2)<((m_SelectZoom.bottom+m_SelectZoom.top)/2+m/4))
		{
			V=TRUE;

			Rect.top=m_SelectZoom.top;
			Rect.left=m_SelectZoom.left;
			Rect.bottom=m_SelectZoom.bottom;
			Rect.right=m_SelectZoom.right;
		}
		//在矩形框内,鼠标为四箭头,移动矩形
		else if((point.x*(pData->m_nZoomFactor)+nPos1)<(m_SelectZoom.right-8*pData->m_nZoomFactor)&&(point.x*(pData->m_nZoomFactor)+nPos1)>(m_SelectZoom.left+5*pData->m_nZoomFactor)&&
			(point.y*(pData->m_nZoomFactor)+nPos2)>(m_SelectZoom.top+8*pData->m_nZoomFactor)&&(point.y*(pData->m_nZoomFactor)+nPos2)<(m_SelectZoom.bottom-5*pData->m_nZoomFactor))
		{
			L=TRUE;
			s=point.x;
			t=point.y;
			Rect.top=m_SelectZoom.top;
			Rect.left=m_SelectZoom.left;
			Rect.bottom=m_SelectZoom.bottom;
			Rect.right=m_SelectZoom.right;
		/*	Rect.bottom = 0;
            Rect.left = 0;
			Rect.top = 0;
			Rect.right=0;*/
		}
		else
		{   
			zx=point.x;
			zy=point.y;
            Rect.left=(point.x)*(pData->m_nZoomFactor)+nPos1;
			Rect.top=(point.y)*(pData->m_nZoomFactor)+nPos2;
		}
	 }
	  break;
 
    //如果放大镜,则缩放比例为上次的1/2即放大图象
    //初始时显示图象为原位图的1/8,即缩小8倍
	case CT_ZOOMIN:
		pData->m_nZoomFactor /= 2;
		if (pData->m_nZoomFactor == 0) pData->m_nZoomFactor = 1;
		if (pData->m_nZoomFactor ==8)
        {
          pData->m_ptPaintOrg.y=0;
          pData->m_ptPaintOrg.x=0;
		}
        {  
		  CRect rt;
		  GetParent()->GetClientRect(rt);
		  pContainerWnd->ResetScrollBar((int&)rt.left, (int&)rt.right);
          pVRulerWnd->UpdateWindow(); 
          pHRulerWnd->UpdateWindow(); 
          pViewWnd->UpdateWindow(); 
		}
		InvalidateContainers();
		break;
    //缩小镜
	case CT_ZOOMOUT:
		pData->m_nZoomFactor *= 2;
		if (pData->m_nZoomFactor > ZF_MAX) pData->m_nZoomFactor = ZF_MAX;
	    if (pData->m_nZoomFactor ==8)
        {
          pData->m_ptPaintOrg.y=0;
          pData->m_ptPaintOrg.x=0;
		}
       	{
		   CRect rt;
		   GetParent()->GetClientRect(rt);
		   pContainerWnd->ResetScrollBar((int&)rt.left, (int&)rt.right);
           pVRulerWnd->UpdateWindow(); 
           pHRulerWnd->UpdateWindow(); 
           pViewWnd->UpdateWindow();
		}
       InvalidateContainers();
		break;
    //手形状,移动图像
    case CT_HAND:
	   if(!bTrackHand)
	   {
		  bTrackHand=TRUE;
          SetCapture();
	   }
       break;
	default:
		break;
	}
 }

//////////////////////////////////////////////////////////////////
//鼠标移动                                                      //
//////////////////////////////////////////////////////////////////
void CViewWnd::OnMouseMove(UINT nFlags, CPoint point) 
{
    CClientDC	DC(this);
	CPen newPen(PS_SOLID, 1, RGB(0,0,0));
	CPen* oldPen;
	oldPen=DC.SelectObject( &newPen );
   
	int n,m; 
	CRect rt0;
    RECT preRect;



	preRect=Rect;
	
	GetParent()->GetClientRect(rt0);
    //根据鼠标不同形状,执行不同工作
	if(m_iCursorType==CT_CROSS)	
	{
	  if(!bTrack)     //没有按下鼠标左键
	  {	
        n=m_SelectZoom.right-m_SelectZoom.left;	
  	    m=m_SelectZoom.bottom-m_SelectZoom.top;

		//右下角
		if((point.x*(pData->m_nZoomFactor)+nPos1)<(m_SelectZoom.right+8*pData->m_nZoomFactor)&&(point.x*(pData->m_nZoomFactor)+nPos1)>(m_SelectZoom.right-8*pData->m_nZoomFactor)&&
			(point.y*(pData->m_nZoomFactor)+nPos2)<(m_SelectZoom.bottom+8*pData->m_nZoomFactor)&&(point.y*(pData->m_nZoomFactor)+nPos2)>(m_SelectZoom.bottom-8*pData->m_nZoomFactor))
		{
		  ::SetCursor(::LoadCursor(NULL,IDC_SIZENWSE) );
		}
		//左上角
		if((point.x*(pData->m_nZoomFactor)+nPos1)<(m_SelectZoom.left+8*pData->m_nZoomFactor)&&(point.x*(pData->m_nZoomFactor)+nPos1)>(m_SelectZoom.left-8*pData->m_nZoomFactor)&&
			(point.y*(pData->m_nZoomFactor)+nPos2)<(m_SelectZoom.top+8*pData->m_nZoomFactor)&&(point.y*(pData->m_nZoomFactor)+nPos2)>(m_SelectZoom.top-8*pData->m_nZoomFactor))
		{
		  ::SetCursor(::LoadCursor(NULL,IDC_SIZENWSE) );
		}
		//右上角
		if((point.x*(pData->m_nZoomFactor)+nPos1)<(m_SelectZoom.right+8*pData->m_nZoomFactor)&&(point.x*(pData->m_nZoomFactor)+nPos1)>(m_SelectZoom.right-8*pData->m_nZoomFactor)&&
			(point.y*(pData->m_nZoomFactor)+nPos2)<(m_SelectZoom.top+8*pData->m_nZoomFactor)&&(point.y*(pData->m_nZoomFactor)+nPos2)>(m_SelectZoom.top-8*pData->m_nZoomFactor))
		{
		  ::SetCursor(::LoadCursor(NULL,IDC_SIZENESW) );
		}
		//左下角
		if((point.x*(pData->m_nZoomFactor)+nPos1)<(m_SelectZoom.left+8*pData->m_nZoomFactor)&&(point.x*(pData->m_nZoomFactor)+nPos1)>(m_SelectZoom.left-8*pData->m_nZoomFactor)&&
			(point.y*(pData->m_nZoomFactor)+nPos2)<(m_SelectZoom.bottom+8*pData->m_nZoomFactor)&&(point.y*(pData->m_nZoomFactor)+nPos2)>(m_SelectZoom.bottom-8*pData->m_nZoomFactor))
		{
		  ::SetCursor(::LoadCursor(NULL,IDC_SIZENESW) );
		}
		//上边中心
        if((point.x*(pData->m_nZoomFactor)+nPos1)>((m_SelectZoom.left+m_SelectZoom.right)/2-n/4)&&(point.x*(pData->m_nZoomFactor)+nPos1)<((m_SelectZoom.left+m_SelectZoom.right)/2+n/4)&&
			(point.y*(pData->m_nZoomFactor)+nPos2)<(m_SelectZoom.top+8)&&(point.y*(pData->m_nZoomFactor)+nPos2)>(m_SelectZoom.top-8))
		{
		  ::SetCursor(::LoadCursor(NULL,IDC_SIZENS) );
		}
		//下边中心
        if((point.x*(pData->m_nZoomFactor)+nPos1)>((m_SelectZoom.left+m_SelectZoom.right)/2-n/4)&&(point.x*(pData->m_nZoomFactor)+nPos1)<((m_SelectZoom.right+m_SelectZoom.left)/2+n/4)&&
			(point.y*(pData->m_nZoomFactor)+nPos2)<(m_SelectZoom.bottom+8)&&(point.y*(pData->m_nZoomFactor)+nPos2)>(m_SelectZoom.bottom-8))
		{
		  ::SetCursor(::LoadCursor(NULL,IDC_SIZENS) );
		}
		//左边中心
        if((point.x*(pData->m_nZoomFactor)+nPos1)>(m_SelectZoom.left-8)&&(point.x*(pData->m_nZoomFactor)+nPos1)<(m_SelectZoom.left+8)&&
			(point.y*(pData->m_nZoomFactor)+nPos2)>((m_SelectZoom.top+m_SelectZoom.bottom)/2-m/4)&&(point.y*(pData->m_nZoomFactor)+nPos2)<((m_SelectZoom.bottom+m_SelectZoom.top)/2+m/4))
		{
		  ::SetCursor(::LoadCursor(NULL,IDC_SIZEWE) );
		}
		//右边中心
        if((point.x*(pData->m_nZoomFactor)+nPos1)>(m_SelectZoom.right-8)&&(point.x*(pData->m_nZoomFactor)+nPos1)<(m_SelectZoom.right+8)&&
			(point.y*(pData->m_nZoomFactor)+nPos2)>((m_SelectZoom.top+m_SelectZoom.bottom)/2-m/4)&&(point.y*(pData->m_nZoomFactor)+nPos2)<((m_SelectZoom.bottom+m_SelectZoom.top)/2+m/4))
		{
		  ::SetCursor(::LoadCursor(NULL,IDC_SIZEWE) );
		}
		//非上述位置
		if((point.x*(pData->m_nZoomFactor)+nPos1)<(m_SelectZoom.right-8*pData->m_nZoomFactor)&&(point.x*(pData->m_nZoomFactor)+nPos1)>(m_SelectZoom.left+8*pData->m_nZoomFactor)&&
			(point.y*(pData->m_nZoomFactor)+nPos2)>(m_SelectZoom.top+8*pData->m_nZoomFactor)&&(point.y*(pData->m_nZoomFactor)+nPos2)<(m_SelectZoom.bottom-8*pData->m_nZoomFactor))
		{
		  ::SetCursor(::LoadCursor(NULL,IDC_SIZEALL));
		}
	 }
	}//结束bTrack
	if(bTrack)  //如果按下鼠标左键并且移动
	{
		
       short OldROP=DC.SetROP2( R2_NOTXORPEN  );
	   if(L)  
	   {
		   DC.MoveTo(Rect.left,Rect.top);
		   DC.LineTo(Rect.right,Rect.top);		
		   DC.LineTo(Rect.right,Rect.bottom);
		   DC.LineTo(Rect.left,Rect.bottom);
		   DC.LineTo(Rect.left,Rect.top);

  		   Rect.left=m_SelectZoom.left+(point.x-s)*(pData->m_nZoomFactor);
		   Rect.top=m_SelectZoom.top+(point.y-t)*(pData->m_nZoomFactor);
		   Rect.right=m_SelectZoom.right+(point.x-s)*(pData->m_nZoomFactor);
		   Rect.bottom=m_SelectZoom.bottom+(point.y-t)*(pData->m_nZoomFactor);
		  
		   if(Rect.left<0)
		   {
			 Rect.left=0;
			 Rect.right=m_SelectZoom.right-m_SelectZoom.left;
		   }
           if(Rect.top<0)
		   {
			 Rect.top=0;
			 Rect.bottom=m_SelectZoom.bottom-m_SelectZoom.top;
		   }
		   if(Rect.left<0&&Rect.top<0)
		   {
			 Rect.top=0;
			 Rect.left=0;
			 Rect.right=m_SelectZoom.right-m_SelectZoom.left;
			 Rect.bottom=m_SelectZoom.bottom-m_SelectZoom.top;
		   }
           if(Rect.right>shuzu3)
		   {
			 Rect.right=shuzu3;
			 Rect.left=Rect.right-(m_SelectZoom.right-m_SelectZoom.left);
		   }
		   if(Rect.bottom>shuzu5)
		   {
			Rect.bottom=shuzu5;
			Rect.top=Rect.bottom-(m_SelectZoom.bottom-m_SelectZoom.top);
		   }
		  if(Rect.right>shuzu3&&Rect.bottom>shuzu5)
		  {
			Rect.right=shuzu3;
			Rect.bottom=shuzu5;
			Rect.top=Rect.bottom-(m_SelectZoom.bottom-m_SelectZoom.top);
			Rect.left=Rect.right-(m_SelectZoom.right-m_SelectZoom.left);
		  }
		  		    
		  DC.MoveTo(Rect.left,Rect.top);
		  DC.LineTo(Rect.right,Rect.top);		
		  DC.LineTo(Rect.right,Rect.bottom);
		  DC.LineTo(Rect.left,Rect.bottom);
		  DC.LineTo(Rect.left,Rect.top);
	   }
	 else//L为FALSE
	  {
		DC.MoveTo(Rect.left,Rect.top);
		DC.LineTo(Rect.right,Rect.top);		//清除矩形
		DC.LineTo(Rect.right,Rect.bottom);
		DC.LineTo(Rect.left,Rect.bottom);
		DC.LineTo(Rect.left,Rect.top);
		
		if(H)//鼠标在上边或下边上
		{
		   DC.LineTo(Rect.right,Rect.top);	
		   DC.LineTo(Rect.right,point.y*(pData->m_nZoomFactor)+nPos2);	
		   DC.LineTo(Rect.left,point.y*(pData->m_nZoomFactor)+nPos2);
		   DC.LineTo(Rect.left,Rect.top);
		}
	   else if(V)//在左边或者右边上
		{
		   DC.LineTo(point.x*(pData->m_nZoomFactor)+nPos1,Rect.top);	
		   DC.LineTo(point.x*(pData->m_nZoomFactor)+nPos1,Rect.bottom);	
		   DC.LineTo(Rect.left,Rect.bottom);
		   DC.LineTo(Rect.left,Rect.top);
		}
	    else
		{
      	   DC.LineTo((point.x)*(pData->m_nZoomFactor)+nPos1,Rect.top);	
		   DC.LineTo((point.x)*(pData->m_nZoomFactor)+nPos1,point.y*(pData->m_nZoomFactor)+nPos2);		//光标点画新矩形
		   DC.LineTo(Rect.left,(point.y)*(pData->m_nZoomFactor)+nPos2);
		   DC.LineTo(Rect.left,Rect.top);
		}
	  }
	 DC.SetROP2(OldROP);

	 if ((point.x < 0)&&(nPos1>0))
	 {
		 if (nPos1 >= 30)
		 {
			 pContainerWnd->OnHScroll(5,nPos1-30,NULL);
		 }
		 else
		 {
		     pContainerWnd->OnHScroll(5,0,NULL);
		 }
	 }
	 if ((point.y < 0)&&(nPos2>0))
	 {	
		 if (nPos1 >= 30)
		 {
			 pContainerWnd->OnVScroll(5,nPos2-30,NULL);
		 }
		 else
		 {
			pContainerWnd->OnVScroll(5,0,NULL);
		 }

	 }
	 if (point.x > rt0.right-20)
	 {
		 pContainerWnd->OnHScroll(5,nPos1+20,NULL);
	 }
	 if (point.y > rt0.bottom -20 )
	 {
		 pContainerWnd->OnVScroll(5,nPos2+20,NULL);
	 }
	}					
			
	DC.SelectObject( oldPen );
	if(L)
	{
      if(Rect.left==0)
	  {
		if(Rect.top==0)
		{
	  	   Rect.right=m_SelectZoom.right-m_SelectZoom.left;
		   Rect.bottom=m_SelectZoom.bottom-m_SelectZoom.top;
		}
		else
		{
           Rect.bottom=m_SelectZoom.bottom+(point.y-t)*(pData->m_nZoomFactor);
		   Rect.right=m_SelectZoom.right-m_SelectZoom.left;
		}
	  }
	  else if(Rect.top==0)
	  {
         Rect.right=m_SelectZoom.right+(point.x-s)*(pData->m_nZoomFactor);
		 Rect.bottom=m_SelectZoom.bottom-m_SelectZoom.top;
	  }
      else if(Rect.right==shuzu3)
	  {
		 if(Rect.bottom==shuzu5)
		 {
            Rect.right=shuzu3;
			Rect.bottom=shuzu5;
		 }
         else
		 {
			Rect.bottom=m_SelectZoom.bottom+(point.y-t)*(pData->m_nZoomFactor);
			Rect.right=shuzu3;	
		 }
	  }
      else if(Rect.bottom==shuzu5)
	  {
		Rect.right=m_SelectZoom.right+(point.x-s)*(pData->m_nZoomFactor);
		Rect.bottom=shuzu3;
	  }
	 else
	 {
		Rect.right=m_SelectZoom.right+(point.x-s)*(pData->m_nZoomFactor);
	    Rect.bottom=m_SelectZoom.bottom+(point.y-t)*(pData->m_nZoomFactor);
	 }
	}//结束L
	else
	{
	  if(H)
	  {
	 	Rect.bottom=point.y*(pData->m_nZoomFactor)+nPos2;
	    Rect.right=m_SelectZoom.right;	
	  }
      else if(V)
	  {
	    Rect.bottom=m_SelectZoom.bottom;	
	    Rect.right=point.x*(pData->m_nZoomFactor)+nPos1;
	  }
	  else
	  {
	    Rect.bottom=(point.y)*(pData->m_nZoomFactor)+nPos2;	//设光标点为矩形右下角
	    Rect.right=(point.x)*(pData->m_nZoomFactor)+nPos1;
	  }
    }//结束ELSE	
	//if (point.x rt0

    preRect.top=Rect.top*10;
    preRect.left=Rect.left*10;
    preRect.right=Rect.right*10;
    preRect.bottom=Rect.bottom*10;
	if(bTrack)
	{
      m_pPositionInfo->SetPosition(preRect,0);
	}
	//用手形状鼠标移动图像
 	if(m_iCursorType==CT_HAND)
	{
      if(bTrackHand&&pData->m_nZoomFactor!=8)
	  {
       	CRect rtx;
	    GetParent()->GetClientRect(rtx);

         Rect.bottom=(point.y-m_ptStart.y)*(pData->m_nZoomFactor)+nPos2;	//设光标点为矩形右下角
	     Rect.right=(point.x-m_ptStart.x)*(pData->m_nZoomFactor)+nPos1;
		
		 pData->m_ptPaintOrg.y=Rect.bottom;
         pData->m_ptPaintOrg.x=Rect.right;
     
		if(pData->m_ptPaintOrg.y<0)
		{
           pData->m_ptPaintOrg.y=0;
		}
        if(pData->m_ptPaintOrg.x<0)
		{
           pData->m_ptPaintOrg.x=0;
        }
        if((pData->m_ptPaintOrg.y+shuzu5*(pData->m_nZoomFactor)/8)>=shuzu5)
		{
           pData->m_ptPaintOrg.y=shuzu5-shuzu5*(pData->m_nZoomFactor)/8;
       	}
        if((pData->m_ptPaintOrg.x+shuzu3*(pData->m_nZoomFactor)/8)>=shuzu3)
		{
           pData->m_ptPaintOrg.x=shuzu3-shuzu3*(pData->m_nZoomFactor)/8;
        }

		if(pData->m_ptPaintOrg.x!=shuzu3&& pData->m_ptPaintOrg.x!=0)
		{
           pContainerWnd->ResetScrollBar((int&)rtx.left, (int&)rtx.right);
           pHRulerWnd->UpdateWindow();
		   pViewWnd->UpdateWindow();
           InvalidateContainers(); 
		}
        if(pData->m_ptPaintOrg.y!=shuzu5/pData->m_nZoomFactor && pData->m_ptPaintOrg.y!=0)
		{
           pContainerWnd->ResetScrollBar((int&)rtx.left, (int&)rtx.right);
		   pVRulerWnd->UpdateWindow();
		   pViewWnd->UpdateWindow();
           InvalidateContainers(); 
		}
	  }
	}
    if (GetCapture() != this) return;
	CDC *pDC;
	pDC = GetDC();
	ReleaseDC(pDC); 
  }

////////////////////////////////////////////////////////////////////////
//鼠标左键抬起
///////////////////////////////////////////////////////////////////////
void CViewWnd::OnLButtonUp(UINT nFlags, CPoint point) 
{	 
	CFile myFile;
	CPoint pointTL;
   	CPoint pointBR;
    CRect rt0;
    RECT tempRect;

    int shuzu4;
    shuzu4=GetPrivateProfileInt("Shuzu","shuzu",1200,InitDir2);

    int nTemp;
  
	nPos1=pData->m_ptPaintOrg.x;

⌨️ 快捷键说明

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