Example #1
0
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);
}
Example #2
0
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);
}