在view中的OnDraw(*pDc)中定义了个矩形用的是 pDc然后用pDc做完图后,现在想加功能,就是当鼠标点击图中的点显示该点数据(也就是该点的坐标)。
    
      添加了LButtonDown的消息函数,OnLButtonDown(UINT nFlags, CPoint point)。然后point和图中的坐标不一样,而且少了将近一倍多,即图中的x为2700, point.x为1216左右。   求解答。
     在OnLbuttonDown中用GetDc()获取的CDC的指针,是不是这里的问题?如果是的话,应该怎么获取?     先谢谢大家了。

解决方案 »

  1.   

    鼠标操作是屏幕坐标
    view里是逻辑坐标,先转换一下
      

  2.   

    不知你的矩形是如何定义x和y的,
    如果在视类定义,响应视类OnLButtonDown,应该是一样的。CRect rect1(0,0,400,400); //会在视窗左上角绘矩形。OnLButtonDown(UINT nFlags, CPoint point);//矩形左上角(及视窗口左上角)坐标应该是 0,0
      

  3.   

    在视类中使用 CDC* pDC = GetDC(); 没问题
    注意坐标转化,可使用ScreenToClient()
      

  4.   

    不知道你图的坐标和屏幕坐标之间的转换关系  
    point是屏幕坐标  你需要转换为你的图中的坐标
      

  5.   

    afx_msg void OnLButtonDown(
       UINT nFlags,
       CPoint point
    );[in] point
    Specifies the x and y coordinates of the pointer, relative to the upper-left corner of the window. 
      

  6.   

    先谢谢楼上几位的答复。    是这样的,我试过ScreenToClient(&point);但是这样的话,数据还是不对。我是在LButtonDown消息里面用TextOut输出point的坐标进行测试的。进行转换以后,显示坐标的位置不是我点击屏幕的位置,而是在我点击之上显示的,没有进行转换之前,点击哪个地方坐标就显示在那个地方,这样我是不是可以认为,不是屏幕坐标与窗口坐标的转换问题,即5楼所说的,point是窗口坐标并非屏幕坐标。   对于我是怎么矩形的,代码如下:void CJKDMDView::OnDraw(CDC* pDC)
    {
    CRect rc;
    int height,width;
    GetClientRect(&rc);
    GetWindowRect(&rc);
    pDC->DPtoLP(&rc);
    height=rc.Height();
    width=rc.Width();
    rc.left=50;
    rc.top=-50;
    rc.bottom=height+50;
    rc.right=width-500;
    Draw_QuXian(pDC,rc,false);          //该函数为绘制数据的函数
    }
    请大家不吝指点
      

  7.   

    刚才又试了下LPtoDP(&point);还是不行
      

  8.   

    你绘制矩形的思路有点晕啊?GetClientRect(&rc); //获得视类客户区矩形,GetWindowRect获得整个窗口屏幕矩形,到底要获取哪个?照现在的写法,GetClientRect这句没有用,被GetWindowRect充了。height和width是整个窗口的高度和宽度。而下面对矩形重新定义:rc.left=50...这个是相对视类客户区的。OnLButtonDown中的point是相对于视类客户区。
      

  9.   


    弄错了,我贴上来的时候把注释也去掉了。  void CJKDMDView::OnDraw(CDC* pDC)
    {
        CRect rc;
        int height,width;
        GetClientRect(&rc);
        //GetWindowRect(&rc);
        pDC->DPtoLP(&rc);
        height=rc.Height();
        width=rc.Width();
        rc.left=50;
        rc.top=-50;
        rc.bottom=height+50;
        rc.right=width-500;    
        Draw_QuXian(pDC,rc,false);          //该函数为绘制数据的函数
    }
      

  10.   

    你先试一个最简单,看是否对应,我试过是一致的。void CJKDMDView::OnDraw(CDC* pDC)
    {
        CRect rc(50,50,100,100);
        Draw_QuXian(pDC,rc,false);          //该函数为绘制数据的函数
    }CJKDMDView::OnLButtonDown()
    {
        TextOut(hdc,point.x,point.y,L"test");
    }
      

  11.   

    void CJKDMDView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 
    {
    pDC->SetMapMode(MM_LOMETRIC);
    }里面加写什么?