请问如何确定一个控件在对话框中的坐标?怎样获得此控件的矩形区域?请各位大哥帮帮忙啊!!!
解决方案 »
- CListCtrl 怎么获得点击的行列号?
- 固定滚动条问题
- 问一个简单的问题,请高手进来!~!~!~在线等
- 请教:谁有PPPoE实现的源码,或者告诉我到哪里去找?
- URLDownloadToCacheFile 下载的小文件不能立即打开!
- 怎样通过程序使自己的进程不能被结束?
- 为什么析构函数不自动被声明为virtual?
- 有用过libcurl的吗? VC怎么编译啊
- 这个怎磨用?
- 请问有个三维的数据 A[512][1024][128] 我给定一个 i1,j1,k1 i2,j2,k2 我需要截取这个之间的数怎么提取?
- 想做个MFC项目,没主题,请教
- `````````````up有分``````````````怎样在托盘区显示状态?
GetClientRect(&rect);
m_pEdit->GetWindowRect(Rect);
m_pEdit->GetParent()->ScreenToClient(Rect);//得到控件相对对话框的位置
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
其原理就是分别得到按钮和窗体的"屏幕坐标"(这个坐标以屏幕为坐标系,
与各个窗体无关,是统一的),再根据二者左上角坐标之差即可得到按钮相对
于窗体的坐标.