#define IDC_BUTTON1                     1001
CButton    m_MyButton1;使用两种方式获取的CRect好象不同
方式一:
CRect rect;
GetDlgItem(IDC_BUTTON1)->GetWindowRect(&rect);  //要获取位置的控件ID
ScreenToClient(rect); //rect.left 就是X坐标,rect.top 就是Y坐标
方式二:
CRect rc;
m_MyButton1.GetClientRect(&rc);       //取得按钮的矩形位置   
两者得到的CRect不同 记得前两天调试的时候好象是一样的 这两天就怎么也不能调试出来了利用m_MyButton1.GetDlgCtrlID()获得的ID是1001确认是同一控件
另外想问下 在Watch窗口想查看m_MyButton1.GetDlgCtrlID()的值 居然无法返回 提示:    m_MyButton1.GetDlgCtrlID()    CXX0052: Error: member function not present
但是在程序正常运行中却能返回正常结果 这是为什么

解决方案 »

  1.   

    正常是不一样的,除非你的控件放在了客户区的左上角方式一:
    CRect rect;
    GetDlgItem(IDC_BUTTON1)->GetWindowRect(&rect); //要获取位置的控件ID
    ScreenToClient(rect); //rect.left 就是X坐标,rect.top 就是Y坐标
    -----------------------------------------------------------------
    这个时候的rect是相对于你的对话框来说的位置方式二:
    CRect rc;
    m_MyButton1.GetClientRect(&rc); //取得按钮的矩形位置  
    -------------------------------------------------------
    而这个,很显然是:(0,0,*,*)
      

  2.   

    2楼是正确的 
     建议看看MSDN里 GetWindowRect(CRect *rect)和
    GetClientRect(CRect *rect)2个函数的说明
      

  3.   

    GetClientRect获得的矩形坐标是没有用的,他永恒是0,0,但是GetWindowRect获得的坐标便是有用的。
      

  4.   

    GetClientRect 获取的其实是尺寸