📄 imagelabview.cpp
字号:
CScrollView::OnRButtonDown(nFlags, point);
}
void CImageLABView::OnRButtonUp(UINT nFlags, CPoint point)
{
//CImageLABDoc* pDoc = GetDocument();
//ASSERT_VALID(pDoc);
CScrollView::OnRButtonUp(nFlags, point);
}
BOOL CImageLABView::OnScroll(UINT nScrollCode, UINT nPos, BOOL bDoScroll)
{
MousePt -= ScrollOrgPt;
OldScrollOrgPt = ScrollOrgPt;
ScrollOrgPt = GetScrollPosition();
MousePt += ScrollOrgPt;
CMainFrame *pMainFrame = (CMainFrame *)AfxGetMainWnd();
ASSERT_VALID(pMainFrame);
BOOL NoScroll = OldScrollOrgPt==ScrollOrgPt;
if(!NoScroll)
{
if(pMainFrame->m_wndMyDialogBar.BigImage)
{
pMainFrame->m_wndMyDialogBar.DrawMiniImage();
}
else
{
pMainFrame->m_wndMyDialogBar.Invalidate();
}
}
BYTE nCode = LOBYTE (nScrollCode);
if ((nCode == SB_PAGELEFT) || (nCode == SB_PAGERIGHT) || (nCode == SB_LINELEFT) || (nCode == SB_LINERIGHT))
{
int nCount, nInc, nFinalInc, nLineCode;
switch (nCode)
{
case SB_PAGELEFT:
nLineCode = SB_LINELEFT;
nInc = m_pageDev.cx / m_nPageSlices;
nFinalInc = m_pageDev.cx % m_nPageSlices;
nCount = m_nPageSlices;
break;
case SB_PAGERIGHT:
nLineCode = SB_LINERIGHT;
nInc = m_pageDev.cx / m_nPageSlices;
nFinalInc = m_pageDev.cx % m_nPageSlices;
nCount = m_nPageSlices;
break;
case SB_LINELEFT:
nLineCode = SB_LINELEFT;
nInc = m_lineDev.cx / m_nLineSlices;
nFinalInc = m_lineDev.cx % m_nLineSlices;
nCount = m_nLineSlices;
break;
case SB_LINERIGHT:
nLineCode = SB_LINERIGHT;
nInc = m_lineDev.cx / m_nLineSlices;
nFinalInc = m_lineDev.cx % m_nLineSlices;
nCount = m_nLineSlices;
break;
}
int nOldLineSize = m_lineDev.cx;
BOOL bResult = FALSE;
DWORD dwTime = 0;
while (nCount--)
{
DWORD dwCurrentTime = ::GetCurrentTime ();
DWORD dwElapsedTime = dwCurrentTime - dwTime;
if (dwElapsedTime < m_dwMinTime)
::Sleep (m_dwMinTime - dwElapsedTime);
dwTime = dwCurrentTime;
m_lineDev.cx = nInc;
BOOL bScrolled =
CScrollView::OnScroll (MAKEWORD (nLineCode, -1), nPos);
m_lineDev.cx = nOldLineSize;
if (!bScrolled)
return bResult;
bResult = TRUE;
}
if (nFinalInc) {
m_lineDev.cx = nFinalInc;
if (!CScrollView::OnScroll (MAKEWORD (nLineCode, -1), nPos))
bResult = TRUE;
m_lineDev.cx = nOldLineSize;
}
return bResult;
}
// Next handle up/down scroll messages. If scrolling by page,
// scroll m_nPageSlices times rather than 1. If scrolling by line,
// scroll m_nLineSlices times.
nCode = HIBYTE (nScrollCode);
if ((nCode == SB_PAGEUP) || (nCode == SB_PAGEDOWN) || (nCode == SB_LINEUP) || (nCode == SB_LINEDOWN))
{
int nCount, nInc, nFinalInc, nLineCode;
switch (nCode)
{
case SB_PAGEUP:
nLineCode = SB_LINEUP;
nInc = m_pageDev.cy / m_nPageSlices;
nFinalInc = m_pageDev.cy % m_nPageSlices;
nCount = m_nPageSlices;
break;
case SB_PAGEDOWN:
nLineCode = SB_LINEDOWN;
nInc = m_pageDev.cy / m_nPageSlices;
nFinalInc = m_pageDev.cy % m_nPageSlices;
nCount = m_nPageSlices;
break;
case SB_LINEUP:
nLineCode = SB_LINEUP;
nInc = m_lineDev.cy / m_nLineSlices;
nFinalInc = m_lineDev.cy % m_nLineSlices;
nCount = m_nLineSlices;
break;
case SB_LINEDOWN:
nLineCode = SB_LINEDOWN;
nInc = m_lineDev.cy / m_nLineSlices;
nFinalInc = m_lineDev.cy % m_nLineSlices;
nCount = m_nLineSlices;
break;
}
int nOldLineSize = m_lineDev.cy;
BOOL bResult = FALSE;
DWORD dwTime = 0;
while (nCount--)
{
DWORD dwCurrentTime = ::GetCurrentTime ();
DWORD dwElapsedTime = dwCurrentTime - dwTime;
if (dwElapsedTime < m_dwMinTime)
::Sleep (m_dwMinTime - dwElapsedTime);
dwTime = dwCurrentTime;
m_lineDev.cy = nInc;
BOOL bScrolled =
CScrollView::OnScroll (MAKEWORD (-1, nLineCode), nPos);
m_lineDev.cy = nOldLineSize;
if (!bScrolled)
return bResult;
bResult = TRUE;
}
if (nFinalInc) {
m_lineDev.cy = nFinalInc;
if (!CScrollView::OnScroll (MAKEWORD (-1, nLineCode), nPos))
bResult = TRUE;
m_lineDev.cy = nOldLineSize;
}
return bResult;
}//*/
return CScrollView::OnScroll(nScrollCode, nPos, bDoScroll);
}
void CImageLABView::CheckRect(CPoint &p1,CPoint &p2)
{
P_LONG tempx,tempy,temp;
tempx=p2.x - p1.x;
tempy=p2.y - p1.y;
if(tempx<0)
{
temp=p1.x;
p1.x=p2.x;
p2.x=temp;
}
if(tempy<0)
{
temp=p1.y;
p1.y=p2.y;
p2.y=temp;
}
}
void CImageLABView::OnContextMenu(CWnd*, CPoint point)
{ // CG: This block was added by the Pop-up Menu component { if (point.x == -1 && point.y == -1)
{ //keystroke invocation CRect rect; GetClientRect(rect); ClientToScreen(rect); point = rect.TopLeft(); point.Offset(5, 5); } CMenu menu; VERIFY(menu.LoadMenu(CG_IDR_POPUP_IMAGE_LABVIEW)); CMenu* pPopup = menu.GetSubMenu(0); ASSERT(pPopup != NULL); CWnd* pWndPopupOwner = this; while (pWndPopupOwner->GetStyle() & WS_CHILD) pWndPopupOwner = pWndPopupOwner->GetParent(); pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, pWndPopupOwner); }
}
void CImageLABView::OnFitimage()
{
ShowScale = FITSCALENUM;
fShowScale = ShowScaleType[ShowScale];
DashRectDrawed = FALSE;
OnUpdate(this,NULL,NULL);
ScrollOrgPt = GetScrollPosition();
for(int i= 0; i< MAXPINNUM; i++)
{
if( m_Pin[i] != NULL )
{
m_PinPos[i].x = m_PinImagePos[i].x;
m_PinPos[i].y = m_PinImagePos[i].y;
m_Pin[i]->MoveToPt(m_PinPos[i]);
}
}
}
void CImageLABView::OnUpdateFitimage(CCmdUI* pCmdUI)
{
pCmdUI->Enable(ShowScale != FITSCALENUM);
}
void CImageLABView::OnZoomin()
{
ShowScale++;
fShowScale = ShowScaleType[ShowScale];
DashRectDrawed = FALSE;
OnUpdate(this,NULL,NULL);
ScrollOrgPt = GetScrollPosition();
for(int i= 0; i< MAXPINNUM; i++)
{
if( m_Pin[i] != NULL )
{
m_PinPos[i].x = int( fShowScale * m_PinImagePos[i].x );
m_PinPos[i].y = int( fShowScale * m_PinImagePos[i].y );
m_Pin[i]->MoveToPt(m_PinPos[i]);
}
}
}
void CImageLABView::OnUpdateZoomin(CCmdUI* pCmdUI)
{
pCmdUI->Enable(ShowScale<MAXSCALENUM-1);
}
void CImageLABView::OnZoomout()
{
ShowScale--;
fShowScale = ShowScaleType[ShowScale];
DashRectDrawed = FALSE;
OnUpdate(this,NULL,NULL);
ScrollOrgPt = GetScrollPosition();
for(int i= 0; i< MAXPINNUM; i++)
{
if( m_Pin[i] != NULL )
{
m_PinPos[i].x = int( fShowScale * m_PinImagePos[i].x );
m_PinPos[i].y = int( fShowScale * m_PinImagePos[i].y );
m_Pin[i]->MoveToPt(m_PinPos[i]);
}
}
}
void CImageLABView::OnUpdateZoomout(CCmdUI* pCmdUI)
{
pCmdUI->Enable(ShowScale>0);
}
void CImageLABView::OnImageShowlinegrayinfo()
{
IsShowLineGray = TRUE;
if(DashRectDrawed && !ISLineSelected)
{
CPoint p0 = SelectLTPt- ScrollOrgPt;
CPoint p1 = SelectRBPt- ScrollOrgPt;
CheckRect(p0, p1);
CRect dashRect(p0.x, p0.y, p1.x+ 1, p1.y+ 1);
InvalidateRect(dashRect, FALSE);
DashRectDrawed = FALSE;
}//*/
if(ISLineSelected)
{
CPoint p0, p1;
GetSelectArea(p0, p1);
CImageLABDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CLineGrayInfoDlg dlg(GetDocument(), p0, p1);
dlg.DoModal();
ISLineSelected = IsShowLineGray = DashRectDrawed = FALSE;
p0 = SelectLTPt - ScrollOrgPt;
p1 = SelectRBPt - ScrollOrgPt;
CheckRect(p0, p1);
CRect dashRect(p0.x-1,p0.y-1,p1.x+2,p1.y+2);
InvalidateRect(dashRect, FALSE);
}
}
void CImageLABView::OnUpdateImageShowlinegrayinfo(CCmdUI* pCmdUI)
{
pCmdUI->SetText(ISLineSelected ? "线灰度显示" : "线灰度显示选点");
}
BOOL CImageLABView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if(nHitTest == HTCLIENT)
{
if(IsShowLineGray)
::SetCursor( AfxGetApp()->LoadCursor(IDC_CURSOR_SELECTLINE));
else if(!IsFreePan)
{
if(CapsKeyLocked)
::SetCursor( AfxGetApp()->LoadCursor(IDC_CURSOR_SELECTRECT));
else
::SetCursor( AfxGetApp()->LoadStandardCursor(IDC_ARROW));
}
else if(CanManualMove && IsFreePan)
{
if(IsLButtonDown)
::SetCursor( AfxGetApp()->LoadCursor(IDC_HANDGRABED));
else
::SetCursor( AfxGetApp()->LoadCursor(IDC_HANDWANTGRAB));
}
return true;
}
return CScrollView::OnSetCursor(pWnd, nHitTest, message);
}
void CImageLABView::OnUpdateIndicatorImagepixels(CCmdUI* pCmdUI)
{
CImageLABDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
double fPx = MousePt.x/ ShowScaleType[ShowScale];
double fPy = MousePt.y/ ShowScaleType[ShowScale];
int ClientW = int( pDoc->Image.m_ImageWidth * ShowScaleType[ShowScale] );
long px = long( fPx + 0.5);
long py = long( fPy + 0.5);
if(pDoc->Image.CheckPoint(px, py) && pDoc->Image.m_lpDibArray != NULL)
{
RGBTRIPLE temp = pDoc->Image.GetRGBPixel(px, py);
CString msg;
msg.Format("鼠标位置:(%7.2f, %7.2f) RGB=(%3d,%3d,%3d)\n",fPx, fPy,
temp.rgbtRed, temp.rgbtGreen, temp.rgbtBlue);
pCmdUI->SetText(msg);
if(ClientW < 500)
pSB->SetPaneText(0,msg);
}
}
void CImageLABView::OnUpdateIndicatorImagescale(CCmdUI* pCmdUI)
{
CString strscale;
strscale.Format("显示比例:%d%%",int(ShowScaleType[ShowScale]*100));
pCmdUI->SetText(strscale);
}
void CImageLABView::OnEditCopy()
{
CImageLABDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (OpenClipboard())
{
BeginWaitCursor();
EmptyClipboard();
CPoint p0,p1;
if(DashRectDrawed)
{
GetSelectArea(p0,p1);
}
else
{
p0 = CPoint(0,0);
p1 = CPoint(pDoc->Image.m_ImageWidth-1,pDoc->Image.m_ImageHeight-1);
}
HANDLE h_Dib = pDoc->Image.GetCopyHandle(p0, p1);
SetClipboardData(CF_DIB, CopyHandle(h_Dib));
CloseClipboard();
pDoc->Image.ReleaseCopyHandle();
EndWaitCursor();
}
}
BOOL CImageLABView::GetSelectArea(CPoint &p1, CPoint &p2)
{
CImageLABDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CPoint tempPT1(0, 0), tempPT2(0, 0);
int w = int(pDoc->Image.m_ImageWidth*ShowScaleType[ShowScale]);
int h = int(pDoc->Image.m_ImageHeight*ShowScaleType[ShowScale]);
CRect ViewRect;
GetClientRect(&ViewRect);
if(ViewRect.Width()>w)
{
tempPT1.x -= (ViewRect.Width()-w)/2;
tempPT2.x -= (ViewRect.Width()-w)/2;
}
if(ViewRect.Height()>h)
{
tempPT1.y -= (ViewRect.Height()-h)/2;
tempPT2.y -= (ViewRect.Height()-h)/2;
}
tempPT1.x = int((double)SelectLTPt.x /ShowScaleType[ShowScale] + 0.5);
tempPT1.y = int((double)SelectLTPt.y /ShowScaleType[ShowScale] + 0.5);
tempPT2.x = int((double)SelectRBPt.x /ShowScaleType[ShowScale] + 0.5);
tempPT2.y = int((double)SelectRBPt.y /ShowScaleType[ShowScale] + 0.5);
pDoc->Image.CheckPoint(tempPT1);
pDoc->Image.CheckPoint(tempPT2);
pDoc->Image.CheckRect(tempPT1, tempPT2);
p1 = tempPT1;
p2 = tempPT2;
return TRUE;
}
void CImageLABView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView)
{
CMainFrame *pMain = (CMainFrame *)AfxGetMainWnd();
pMain->m_wndMyDialogBar.Invalidate();
CImageLABDoc* pDoc = GetDocument();
if( pDoc->Image.m_SorceType )
CImageLABApp::SorceType = pDoc->Image.m_SorceType;
if(!bFreeze && hcg200 != NULL)
{
if( !bActivate )
{
CG200Capture(hcg200, false);
}
else
{
CG200Capture(hcg200, true);
}
}
CScrollView::OnActivateView(bActivate, pActivateView, pDeactiveView);
}
void CImageLABView::OnFreepan()
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -