鼠标在客户区上按一下,如何把OnLButtonDown()里面客户区坐标的point转换成View的逻辑单元?因为我想知道鼠标点在了View的什么位置上。另外,如何得到viewport(视口)的大小?我用的是CScrollView

解决方案 »

  1.   

    CPoint mypoint = GetScrollPos();
    logic_x = point.x + mypoint.x;
    logic_y = point.x + mypoint.y;
      

  2.   

    想得到point的逻辑坐标,直接使用DPtoLP即可.但要保证DC已经预处理(既调整过视口和窗口原点).如在OnDraw中,已经处理,直接调用DPtoLP,如在OnPait或其他地方,则需先调用nPrepareDC预处理.得到viewport(视口)的大小可用GetViewportExt.
      

  3.   

    得到视口大小的返回值好象不对,大家帮我看看!CDC* pDC=GetDC();
    OnPrepareDC(pDC);
    ///////////////////
    pDC->DPtoLP(&point);CSize Size=pDC->GetViewportExt();//这里怎么反回的是1,1
    pDC->DPtoLP(&Size);point.x-=Size.cx/2;
    point.y-=Size.cy/2;ScrollToPosition(point);////////////////////
    ReleaseDC(pDC);
      

  4.   

    可用BOOL ClientToScreen(
      HWND hWnd,       // handle to window
      LPPOINT lpPoint  // screen coordinates
    );BOOL ScreenToClient(
      HWND hWnd,        // handle to window
      LPPOINT lpPoint   // screen coordinates
    );相互转换
      

  5.   

    void CPicEditView::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    CPoint local = point;
             CClientDC dc(this);
             OnPrepareDC(&dc);
             dc.DPtoLP(&local);
             //转换完毕,对local进行判断

    CScrollView::OnLButtonDown(nFlags, point);
    }
      

  6.   

    得到视口大小的返回值好象不对,大家帮我看看!CDC* pDC=GetDC();
    OnPrepareDC(pDC);
    ///////////////////
    pDC->DPtoLP(&point);CSize Size=pDC->GetViewportExt();//这里怎么反回的是1,1
    pDC->DPtoLP(&Size);point.x-=Size.cx/2;
    point.y-=Size.cy/2;ScrollToPosition(point);////////////////////
    ReleaseDC(pDC);