操作一:
CRect rectheader;
CWnd* pWnd;
pWnd = GetDlgItem(IDC_HEADERPOS);
pWnd=GetDlgItem(IDC_HEADERPOS);
pWnd->GetWindowRect(&rectheader);
pWnd->ScreenToClient(&rectheader);
操作二:
CRect rectheader;
GetDlgItem(IDC_HEADERPOS)->GetWindowRect(rectheader);
ScreenToClient(&rectheader);
问题:
两种操作方法出现的坐标值都不一样,请问一下,为什么会出现这种情况 ?还希望高手给予解释一下,谢谢。
另:新建CWnd对像如何与当前对话框进行关联?
6 个解决方案
#1
比如:一个窗体上面的button控件。GetWindowRect获取的是button在屏幕的坐标。ScreenToClient 把button在屏幕的坐标转为在窗体的坐标。
#2
pWnd->ScreenToClient(&rectheader);
改成相对于对话框。
this->ScreenToClient(&rectheader);
改成相对于对话框。
this->ScreenToClient(&rectheader);
#3
操作1中:
pWnd->ScreenToClient(&rectheader);//把屏幕坐标转化成相对当前窗体的坐标
操作2中:ScreenToClient(&rectheader);相当于: this->ScreenToClient(&rectheader);
//将控件大小转换为在对话框中的区域坐标
在这两个操作中,调用的对象不一样。
操作2中:ScreenToClient(&rectheader);相当于: this->ScreenToClient(&rectheader);
//将控件大小转换为在对话框中的区域坐标
在这两个操作中,调用的对象不一样。
#4
哦,明白了,谢谢。
另外我还想问一下,不说是有句柄也可以操作对像吗?为什么用下面的代码运行时会报错呢???
CRect rectheader;
CWnd* pWnd;
pWnd->m_hWnd = GetDlgItem(IDC_HEADERPOS)->m_hWnd;
pWnd=GetDlgItem(IDC_HEADERPOS);
pWnd->GetWindowRect(&rectheader);
pWnd->ScreenToClient(&rectheader);
q
#5
CWnd *pWnd = GetDlgItem(ID_***); // 取得控件的指针
HWND hwnd = pWnd->GetSafeHwnd(); // 取得控件的句柄
HWND hwnd = pWnd->GetSafeHwnd(); // 取得控件的句柄
#6
非常感谢。
#1
比如:一个窗体上面的button控件。GetWindowRect获取的是button在屏幕的坐标。ScreenToClient 把button在屏幕的坐标转为在窗体的坐标。
#2
pWnd->ScreenToClient(&rectheader);
改成相对于对话框。
this->ScreenToClient(&rectheader);
改成相对于对话框。
this->ScreenToClient(&rectheader);
#3
操作1中:
pWnd->ScreenToClient(&rectheader);//把屏幕坐标转化成相对当前窗体的坐标
操作2中:ScreenToClient(&rectheader);相当于: this->ScreenToClient(&rectheader);
//将控件大小转换为在对话框中的区域坐标
在这两个操作中,调用的对象不一样。
操作2中:ScreenToClient(&rectheader);相当于: this->ScreenToClient(&rectheader);
//将控件大小转换为在对话框中的区域坐标
在这两个操作中,调用的对象不一样。
#4
哦,明白了,谢谢。
另外我还想问一下,不说是有句柄也可以操作对像吗?为什么用下面的代码运行时会报错呢???
CRect rectheader;
CWnd* pWnd;
pWnd->m_hWnd = GetDlgItem(IDC_HEADERPOS)->m_hWnd;
pWnd=GetDlgItem(IDC_HEADERPOS);
pWnd->GetWindowRect(&rectheader);
pWnd->ScreenToClient(&rectheader);
q
#5
CWnd *pWnd = GetDlgItem(ID_***); // 取得控件的指针
HWND hwnd = pWnd->GetSafeHwnd(); // 取得控件的句柄
HWND hwnd = pWnd->GetSafeHwnd(); // 取得控件的句柄
#6
非常感谢。