请问如何确定一个控件在对话框中的坐标?怎样获得此控件的矩形区域?请各位大哥帮帮忙啊!!!

解决方案 »

  1.   

    CRect rect;
    GetClientRect(&rect);
      

  2.   

    CRect Rect;          
    m_pEdit->GetWindowRect(Rect);
    m_pEdit->GetParent()->ScreenToClient(Rect);//得到控件相对对话框的位置
      

  3.   

    你用
    m_ctlTestingButton.GetClientRect ((LPRECT) & pOldRect);
    得到的RECT的top和left一定是0,因为这个函数得到的RECT是以按钮控件(其实按钮控件也
    是一个窗体,因为CButton由CWnd继承而来)的Window Rect定坐标系的.也就是说,按钮控件
    的左上角是(0,0),向右为X正,向下为Y正,而并不是以整个窗体为坐标系的.你当然得不到按
    钮相对于窗体的位置信息了.而
    m_ctlTestingButton.GetWindowRect((LPRECT) & pOldRect);
    可等价于下面两句话:
    m_ctlTestingButton.GetClientRect((LPRECT)rect);
    m_ctlTestingButton.ClienttoScreen((LPRECT)rect);而
    ScreenToClient ((LPRECT) & pOldRect);
    这个函数只是由于坐标转换,自然也不能得到按钮相对于窗体的位置信息.
    而且你((LPRECT) & pOldRect)的写法似乎也有问题.正确的用法应该是:CRect rect;
    CRect rectDlg;//
    m_ctlTestingButton.GetClientRect(&rect);
    m_ctlTestingButton.ClientToScreen(&rect);
    //此两句或由m_btn.GetWindowRect(&rect)代替.GetClientRect(&rectDlg);
    ClientToScreen(&rectDlg);
    CRect rectBtn(
                  rect.left-rectDlg.left,
                  rect.top-rectDlg.top,
                  rect.left+rect.Width(),
                  rect.top+rect.Height()
                 );//这个就是你要的rect
    其原理就是分别得到按钮和窗体的"屏幕坐标"(这个坐标以屏幕为坐标系,
    与各个窗体无关,是统一的),再根据二者左上角坐标之差即可得到按钮相对
    于窗体的坐标.
      

  4.   

    To ray_guang(关) :你讲得很详细啊,我终于明白了!谢谢大侠!