对话框坐标问题

来源:百度知道 编辑:UC知道 时间:2024/09/21 23:22:18
在OnInitDialog()中得到的坐标是3,29,253,196
代码:
GetDlgItem(IDC_PLAY1)->GetClientRect(&rect[0]);
ClientToScreen(&rect[0]);
CString str;
str.Format("%d,%d,%d,%d",rect[0].left,rect[0].top,rect[0].right,rect[0].bottom);
AfxMessageBox(str);

同样的代码在OnBnClickedButton2()中得到的结果是:394,89,644,256
为什么两次结果不一样?OnBnClickedButton2()中的结果才是对的
如何才能在OnInitDialog()中得到和OnBnClickedButton2()中得到的正确结果。
就是在OnInitDialog()得到的是绝对坐标,之后得到的是相对坐标,怎样才能OnInitDialog()得到相对坐标,用了ClientToScreen()还是不对。

ClientToScreen(&rect[0]); 这一句有问题。这一句是隐含的
this->ClientToScreen,你用控件的坐标系,来当作对话框的坐标转换成屏幕坐标,当然会出错了。
改成
GetDlgItem(IDC_PLAY1)->ClientToScreen,然后再
this->ScreenToClient就能得到IDC_PLAY1控件相对于对话框左上角的坐标了。

坐标不同。
用ClientToScreen转换一下。