void CImageSelect::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CDC *pdc=GetDC(); if (m_tracker.HitTest(point) < 0) { CRectTracker track; CRect rImage((500-(int)(image.GetWidth()*ZoomFactor))/2,(300-(int)(image.GetHeight()*ZoomFactor))/2, (500-(int)(image.GetWidth()*ZoomFactor))/2+(int)(image.GetWidth()*ZoomFactor), (300-(int)(image.GetHeight()*ZoomFactor))/2+(int)(image.GetHeight()*ZoomFactor)); if (track.TrackRubberBand(this, point, true)) { track.m_rect.NormalizeRect(); m_tracker.m_rect = track.m_rect; //确保发送图片为正方形 int nlength = max(track.m_rect.Height(),track.m_rect.Width()); m_tracker.m_rect.bottom = m_tracker.m_rect.top + nlength; m_tracker.m_rect.right = m_tracker.m_rect.left + nlength; //确保选取框在图片上 if (m_tracker.m_rect.left<rImage.left) { m_tracker.m_rect.right += rImage.left-m_tracker.m_rect.left; m_tracker.m_rect.left = rImage.left; } if (m_tracker.m_rect.top<rImage.top) { m_tracker.m_rect.bottom += rImage.top-m_tracker.m_rect.top; m_tracker.m_rect.top = rImage.top; } if (m_tracker.m_rect.right>rImage.right) { m_tracker.m_rect.right = rImage.right; } if (m_tracker.m_rect.bottom>rImage.bottom) { m_tracker.m_rect.bottom = rImage.bottom; } nlength = min(m_tracker.m_rect.Height(),m_tracker.m_rect.Width()); m_tracker.m_rect.bottom = m_tracker.m_rect.top + nlength; m_tracker.m_rect.right = m_tracker.m_rect.left + nlength; SetImageRectSelection(&(m_tracker.m_rect)); m_CheckOk.EnableWindow(TRUE); } else { m_tracker.m_rect = CRect(0,0,0,0); } } CRect rect; GetClientRect(&rect); InvalidateRect(&rect,TRUE); showed = false; CDialog::OnLButtonDown(nFlags, point); }
void CDemoView::OnLButtonDown(UINT nFlags, CPoint point) { CDemoDoc* pDoc = GetDocument(); if (pDoc) { switch(pDoc->m_tool){ case 0: // select case 1: { #ifdef VATI_EXTENSIONS if ( nFlags & MK_SHIFT ) pDoc->m_isRectSel = 1; else pDoc->m_isRectSel = 0; #endif CxImage* ima = pDoc->GetImage(); if (ima) { m_RefScroll = GetScrollPosition(); m_RefPoint.x = point.x; m_RefPoint.y = point.y; } } break; case 2: // zoom if (!pDoc->GetWaitingClick()) PostMessage(WM_COMMAND,ID_VIEW_ZOOMIN); break; case 4: // tracker { if (m_tracker.HitTest(point) < 0) { CRectTracker track; if (track.TrackRubberBand(this, point, true)) { track.m_rect.NormalizeRect(); m_tracker.m_rect = track.m_rect; SetImageRectSelection(pDoc,&(m_tracker.m_rect)); } else { m_tracker.m_rect = CRect(0,0,0,0); } } else { if (m_tracker.Track(this, point, true)){ m_tracker.m_rect.NormalizeRect(); SetImageRectSelection(pDoc,&(m_tracker.m_rect)); } else { m_tracker.m_rect = CRect(0,0,0,0); } } OnUpdate(0,0,0); } break; case 3: //text { //pDoc->m_tool=-1; CxImage* ima = pDoc->GetImage(); if (ima){ pDoc->SubmitUndo(); long x = point.x; long y = point.y; GetImageXY(pDoc, ima, &x,&y); #ifndef VATI_EXTENSIONS RGBQUAD c = ima->RGBtoRGBQUAD(pDoc->m_color); c.rgbReserved=255; ima->DrawString(0,x,y,pDoc->m_text,c, pDoc->m_font.lfFaceName, pDoc->m_font.lfHeight, pDoc->m_font.lfWeight, pDoc->m_font.lfItalic, pDoc->m_font.lfUnderline, true); #else ima->DrawStringEx(0,x,y,&theApp.m_text ); #endif } Invalidate(0); } break; case 5: //flood fill { CxImage* ima = pDoc->GetImage(); if (ima){ DlgFloodFill* pDlg = ((CMainFrame *)(AfxGetApp()->m_pMainWnd))->m_pDlgFlood; if (pDlg){ pDlg->UpdateData(1); theApp.m_FloodColor = ima->RGBtoRGBQUAD(pDlg->m_color); theApp.m_FloodTolerance = pDlg->m_tol; theApp.m_FloodOpacity = pDlg->m_opacity; theApp.m_FloodSelect = pDlg->m_select; } pDoc->SubmitUndo(); long x = point.x; long y = point.y; GetImageXY(pDoc, ima, &x,&y); long yflip = ima->GetHeight() - y - 1; ima->FloodFill(x,yflip,theApp.m_FloodColor,theApp.m_FloodTolerance,theApp.m_FloodOpacity,theApp.m_FloodSelect!=0); Invalidate(0); } } break; } if (pDoc->GetWaitingClick()){ pDoc->SetWaitingClick(0); CxImage* ima = pDoc->GetImage(); if (ima) { long x = point.x; long y = point.y; GetImageXY(pDoc, ima, &x,&y); if (ima->IsInside(x,y)) { pDoc->SubmitUndo(); long yflip = ima->GetHeight() - y - 1; ima->SetTransIndex(ima->GetPixelIndex(x,yflip)); // <DP> RGB transparency ima->SetTransColor(ima->GetPixelColor(x,yflip)); pDoc->UpdateAllViews(NULL); } } } #if CXIMAGE_DEMO_SELECT else { KillTimer(1); pDoc->m_NumSel=0; m_SelShift=0; } #endif } CScrollView::OnLButtonDown(nFlags, point); }