📄 viewwnd.cpp
字号:
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 + -