怎么获取控件坐标

如何获取控件坐标?
在一个Dialog上有一个IDC_EDIT1控件,如何获取IDC_EDIT1相对于Dialog的坐标和相对于整个桌面的坐标?
我用GetWindowRect函数获取到得不正确,还用了ClientToScreen和ScreenToClient等函数,得到的都不对,可能是我对函数理解不够,望知道的写个伪代码示例最好,谢谢!

------解决方案--------------------
GetWindowRect,再用ScreenToClient就可以获取坐标了啊,你说说你获取的值是怎样的?
------解决方案--------------------
上你的代码,就是这样用这几个函数的

假如是在 dialog 类的函数中,
CRect rect;
GetDlgItem(IDC_EDIT1)->GetWindowRect(rect);// 获取到相对于整个桌面的坐标
ScreenToClient(rect);// 相对于当前 dialog 的坐标

------解决方案--------------------
MapWindowPoints
------解决方案--------------------
探讨
上你的代码,就是这样用这几个函数的

假如是在 dialog 类的函数中,
CRect rect;
GetDlgItem(IDC_EDIT1)->GetWindowRect(rect);// 获取到相对于整个桌面的坐标
ScreenToClient(rect);// 相对于当前 dialog 的坐标

------解决方案--------------------
HWND hEdit = GetDlgItem(IDC_EDIT1) ;
RECT r,rp;

GetWindowRect(GetParent(hEdit),&rp);
GetWindowRect(hEdit,&r);

此时的r就是相对于桌面的矩形

-------------------------------
offsetRect(&r,-rp.left,-rp.top);

此时的r是相对于Dlg的矩形

楼主可以结贴了,不要发了帖子不管不问,这个习惯可不好
------解决方案--------------------
探讨

HWND hEdit = GetDlgItem(IDC_EDIT1) ;
RECT r,rp;

GetWindowRect(GetParent(hEdit),&rp);
GetWindowRect(hEdit,&r);

此时的r就是相对于桌面的矩形

-------------------------------
offsetRect(&r,-rp.……

------解决方案--------------------
获取控件的句柄,再GetWindowRect就可以了
------解决方案--------------------
GetWindowRect, ScreenToClient
------解决方案--------------------
探讨

GetWindowRect,再用ScreenToClient就可以获取坐标了啊,你说说你获取的值是怎样的?

------解决方案--------------------
探讨
GetWindowRect 获取到的坐标,好像不是Dialog在整个屏幕的坐标。是一个矩形区域,为何?等会上代码

------解决方案--------------------
楼主如果感觉不对的话可以画个坐标 试试啊
------解决方案--------------------
探讨
GetWindowRect 获取到的坐标,好像不是Dialog在整个屏幕的坐标。是一个矩形区域,为何?等会上代码

------解决方案--------------------
大家说的是获取左上角的坐标,你再加上获取控件的宽度和高度,就可以了
------解决方案--------------------
void CTestDlg::OnMouseMove(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
afxDump << "Mouse=" << point << "\n";// dlg client ;left-tip=0;0
CRect rc;
m_MyEdit.GetWindowRect(&rc);//以dlg的非client(NC)为参考
afxDump << "Window=" << rc << "\n";
ScreenToClient(&rc);
afxDump << "Client=" << rc << "\n";////以dlg的client为参考
m_MyEdit.MapWindowPoints(NULL,rc);//HWND_DESKTOP
afxDump << "Desktop=" << rc << "\n";////以桌面为参考
//
CDialog::OnMouseMove(nFlags, point);
}