做了一个对话框,只有一个STATIC控来实现放大镜的效果
欲使该对话框随光标移动
在mousemove里RECT rc,dlgRc;
double width,height;//对话框的宽、高
GetWindowRect(&dlgRc);
width = dlgRc.right - dlgRc.left;
height= dlgRc.bottom - dlgRc.top;
rc.left = point.x - width/2;
rc.top  = point.y - height/2;
SetWindowPos(&WNDTOP,rc.left,rc.top,width,height,SWP_NOACTIVE);问题:
这样设置之后,对话框的中心点与光标不能重合;
若主窗口是最大化时,看上去X方向上光标与中心点好象是同一的,而Y方向大约有四十PIXEL的距离。
若主窗口非最大化时,那光标和对话框就差十万八千里了555555~~~~~
MOUSEMOVE传进来的point是client coordinates吗?setWindowPos()里的RC需要的也是client coordinates吗?
怀疑自己概念混淆,用screenToClient(),ClientToScreen()去转换过rc和point,但都没有成功。用screenToClient()后,对话框移动几次后,居然跳到屏幕外面去了:(
任务到期交不了了,好惨:(
各位大侠帮帮小妹,高分答谢!再问:为什么我不能散200分啊,所以的字又type了一遍晕了!

解决方案 »

  1.   

    RECT rc,dlgRc;
        long width,height;//对话框的宽、高
    ClientToScreen(&point);
        GetWindowRect(&dlgRc);
        width = dlgRc.right - dlgRc.left;
        height= dlgRc.bottom - dlgRc.top;
        rc.left = point.x - width/2;
        rc.top  = point.y - height/2;
        SetWindowPos(&wndTop,rc.left,rc.top,width,height,SWP_NOACTIVATE);
      

  2.   

    因为你在OnMouseMove中得到的鼠标座标point是相对于对话框的,而不是相对于屏幕的,所以需要用 ClientToScreen(&point);进行转换一下
    另外width和height定义为LONG即可,没有必要double;
    还有SetWindowPos()的第一个参数和最后一个参数你好像写错了
      

  3.   

    mousemove传将来的点是相对对话框的,而getwindowrect是相对屏幕的
    CRect rect;
    CPoint pt = point; GetWindowRect(&rect);
    ClientToScreen(&pt); m_pt= point; if (m_pt.x != point.x && m_pt.y != point.y)
    {
    pt.x -= rect.Width()/2;
    pt.y -= rect.Height()/2;
    SetWindowPos(NULL,pt.x, pt.y, rect.Width(), rect.Height(),SWP_NOACTIVATE);

    }
      

  4.   

    SetCapture();//加这一句
    CRect rect;
    CPoint pt = point;

    GetWindowRect(&rect);
    ClientToScreen(&pt);


    if (m_pt.x != point.x && m_pt.y != point.y)
    {
    pt.x -= rect.Width()/2;
    pt.y -= rect.Height()/2;
    SetWindowPos(NULL,pt.x, pt.y, rect.Width(), rect.Height(),SWP_NOACTIVATE);

    }
    m_pt= point;//定义一个成员变量CPoint m_pt;用来记录前一点的位置,如果移动以后的位置和前一位置有差异就移动,否则不移动,m_pt在初始化函数里初始化m_pt
      

  5.   

    忘了告诉你,SetCapture后要ReleaseCapture