MFC获取鼠标指针坐标问题
MFC getting mouse pointer coordinate problem
我正在尝试获取 Rect(图片控件)的坐标,但有点小问题。
这是我完成的过程。
第一。做了一个图片控件
第二。我通过 GetWindowRect
获得了 WindowRect
// myDialogDlg.cpp
CRect m_rcDisp // (is acually in myDialogDlg.h)
BOOL myDialogDlg::OnInitDialog()
{
// IDC_PIC1 == ID of the (static) picture control
GetDlgItem(IDC_PIC1)->GetWindowRect(m_rcDisp);
...
}
第三。我制作了 OnMouseMove 事件,并在鼠标指针位于图片控件内时使用 PtInRect 执行一些操作。
// myDialogDlg.cpp
void myDialogDlg::OnMouseMove(UINT nFlags, CPoint point)
{
CString debug;
{
if (m_rcDisp.PtInRect(point))
{
// my event starts
OutputDebugString(_T("here"));
if (m_CamTrig == CAMERA_TRIG_SW)
{
m_CurSor.x = point.x;
m_CurSor.y = point.y;
InvalidateRect(m_rcDisp, NULL);
}
// my event ends
}
}
CDialogEx::OnMouseMove(nFlags, point);
}
并且... PtInRect 实际工作的地方大约在红框内
:(希望我得到最佳答案。
谢谢!
GetWindowRect returns the window dimensions in screen coordinates. WM_MOUSEMOVE reports the mouse position in client coordinates. ScreenToClient1可用于将屏幕坐标转换为客户端坐标,使图片控件的window矩形坐标和命中测试功能一致共同的起源。
每当图片控件相对于其父对话框移动时都需要执行此操作。如果图片控件从不移动,您只需调整一次矩形。
此答案链接到 Windows API 文档,因为它通常比相应的 MFC 条目提供更多信息并且维护得更好。您可以从 MFC 代码调用其中任何一个,但通常只调用 CWnd 成员更方便。
1 使用 MapWindowPoints instead if you plan on supporting RTL and LTR layouts. See Window Layout and Mirroring 作为指导。
我正在尝试获取 Rect(图片控件)的坐标,但有点小问题。
这是我完成的过程。
第一。做了一个图片控件
第二。我通过 GetWindowRect
获得了 WindowRect// myDialogDlg.cpp
CRect m_rcDisp // (is acually in myDialogDlg.h)
BOOL myDialogDlg::OnInitDialog()
{
// IDC_PIC1 == ID of the (static) picture control
GetDlgItem(IDC_PIC1)->GetWindowRect(m_rcDisp);
...
}
第三。我制作了 OnMouseMove 事件,并在鼠标指针位于图片控件内时使用 PtInRect 执行一些操作。
// myDialogDlg.cpp
void myDialogDlg::OnMouseMove(UINT nFlags, CPoint point)
{
CString debug;
{
if (m_rcDisp.PtInRect(point))
{
// my event starts
OutputDebugString(_T("here"));
if (m_CamTrig == CAMERA_TRIG_SW)
{
m_CurSor.x = point.x;
m_CurSor.y = point.y;
InvalidateRect(m_rcDisp, NULL);
}
// my event ends
}
}
CDialogEx::OnMouseMove(nFlags, point);
}
并且... PtInRect 实际工作的地方大约在红框内
:(希望我得到最佳答案。 谢谢!
GetWindowRect returns the window dimensions in screen coordinates. WM_MOUSEMOVE reports the mouse position in client coordinates. ScreenToClient1可用于将屏幕坐标转换为客户端坐标,使图片控件的window矩形坐标和命中测试功能一致共同的起源。
每当图片控件相对于其父对话框移动时都需要执行此操作。如果图片控件从不移动,您只需调整一次矩形。
此答案链接到 Windows API 文档,因为它通常比相应的 MFC 条目提供更多信息并且维护得更好。您可以从 MFC 代码调用其中任何一个,但通常只调用 CWnd 成员更方便。
1 使用 MapWindowPoints instead if you plan on supporting RTL and LTR layouts. See Window Layout and Mirroring 作为指导。