请教高手一个问题:我在调用MoveWindow函数时,设定的CRect类对象的值为204,5,1019,627之后调用GetWindowRect函数,得到的CRect类对象的值为407,311,1272,933两次CRect的宽度和高度没变,但矩形起始坐标变了这是为什么?

解决方案 »

  1.   

    MoveWindow使用的是客户区坐标,GetWindowRect得到的是屏幕坐标,你可以这样试试:
    RECT r;
    pWnd->GetWindowRect( &r );
    ScreenToClient( &r );
    看看r中的数值是否与MoveWindow时的一致
      

  2.   

    ScreenToClientClientToScreen
    相对座标的问题,是从屏幕还是客户区为0座标,用上面的两个函数转换
      

  3.   

    没什么不可能的!例如我在一个about对话框中这样做:
    void CAboutDlg::OnOK() 
    {
    // TODO: Add extra validation here
    RECT r;
    CString str;GetClientRect( &r );
    str.Format( "left   = %d\n"
    "top    = %d\n"
    "right  = %d\n"
    "bottom = %d", r.left, r.top, r.right, r.bottom );
    MessageBox( str );ClientToScreen( &r );
    str.Format( "left   = %d\n"
    "top    = %d\n"
    "right  = %d\n"
    "bottom = %d", r.left, r.top, r.right, r.bottom );
    MessageBox( str );
    CDialog::OnOK();
    }
    //前者(client)的坐标是0,0,327,83,后者(Screen)的坐标是349,352,676,435