请注意,不是窗口的坐标,即不是由GetWindowRect所获得的那个坐标,GetWindowRect包含了标题栏、工具栏,还有状态栏和菜单,他给出的是窗口的位置。我现在想知道如何获得工作区在屏幕上的位置,还盼高手指点。

解决方案 »

  1.   

    yeah,they are right!
    up
      

  2.   

    GetClipBox(); also can get client position
      

  3.   

    无话可说。
    详细:
    CRect clientrect;
    GetClientRect(clientrect);
    //clientrect就保存了你要得数
      

  4.   

    很抱歉的告诉大家,以上几个都不管用。可能我少说了几句,我是用dx8在窗口中创建了一个绘图区域,我现在想知道这个区域的左上角的屏幕坐标。还请大家继续赐教,谢谢。//GetClientRect好像是最像的一个,但是运行后得到的数据确是(0,0,640,480),我的窗口不在左上角,这个好像是相对于窗口的坐标。
      

  5.   

    这个区域的左上角坐标是逻辑坐标?
    用LPtoDP()得到客户区坐标,ClientToScreen得到屏幕坐标。
      

  6.   

    CPoint pt;
    GetCursorPos(&pt);
      

  7.   

    我说的不对,Lemon_2000(柠檬)差不多首先你是什么映射模式!
      

  8.   

    ClientToScreen给出的数不对,是不是我的用法有点问题?我将InitInstance中创建的HWND保存在一个全局变量中,然后在需要他时调用这些API,请问我这时应该怎么做? 
      

  9.   

    The IDirectDrawSurface7::GetClipper method retrieves the DirectDrawClipper object associated with this surface and increments the reference count of the returned clipper.HRESULT GetClipper(
      LPDIRECTDRAWCLIPPER FAR *lplpDDClipper  
    );please search msdn yourself
      

  10.   


    我将InitInstance中创建的HWND保存在一个全局变量中,然后在需要他时调用这些API,请问我这时应该怎么做?////////////////////////////////////////////////////不必,在用时可以用AfxGetInstanceHandle()得到帖出你的问题代码!
      

  11.   

    point.x = g_pMouse->GetX();
    point.y = g_pMouse->GetY();

    GetClientRect(g_hWnd, &r);
    point.x = point.x-r.left;
    point.y = point.y-r.top;g_pMouse->GetX()得到的是相对于屏幕的坐标,我想做的事情是将其转化为相对于窗口的坐标,r的类型是RECT,g_hWnd就是那个全局变量。
      

  12.   

    haha,我调通了!用的是ScreenToClient !谢谢大家的关心和参与!
      

  13.   

    假设 hWnd 是窗口的句柄:
    RECT Rect;
    ::GetClientClient(hWnd, &Rect);
    ::MapWindowPoints(hWnd, NULL, (POINT*)&Rect, 2);