在 CLR 中的 GetCursorPos 之后获取相对位置?
get relative position after GetCursorPos in CLR?
至此,我已经成功获取了x和y坐标。
面板代码里面。
POINT cursorPos;
GetCursorPos(&cursorPos);
int x;
int y;
x = cursorPos.x;
y = cursorPos.y;
cout << x << endl;
cout << y << endl;
但是,我得到的 x 和 y 坐标是全局的,也就是说,不在我想从中获取坐标的面板内。
我知道 ClientToScreen 需要将 x 和 y 坐标更改为其相对位置,但我如何在 C++/CLR 中执行此操作?
因为ClientToScreen需要句柄,C++/CLR中没有引入句柄(这点有误请见谅)。谢谢:)
更新:我尝试将面板转换为 hwnd,但仍然无法正常工作。
HWND hwnd = static_cast<HWND>(this->panel1->Handle.ToPointer());
您获得全局坐标,因为 GetCursorPos()
是相对于屏幕的。要将其转换为应用程序坐标,只需在由 GetCursorPos()
填充的 POINT 结构上使用 ScreenToClient()
。
在此处查看文档:https://msdn.microsoft.com/en-us/library/windows/desktop/dd162952%28v=vs.85%29.aspx
至此,我已经成功获取了x和y坐标。
面板代码里面。
POINT cursorPos;
GetCursorPos(&cursorPos);
int x;
int y;
x = cursorPos.x;
y = cursorPos.y;
cout << x << endl;
cout << y << endl;
但是,我得到的 x 和 y 坐标是全局的,也就是说,不在我想从中获取坐标的面板内。
我知道 ClientToScreen 需要将 x 和 y 坐标更改为其相对位置,但我如何在 C++/CLR 中执行此操作?
因为ClientToScreen需要句柄,C++/CLR中没有引入句柄(这点有误请见谅)。谢谢:)
更新:我尝试将面板转换为 hwnd,但仍然无法正常工作。
HWND hwnd = static_cast<HWND>(this->panel1->Handle.ToPointer());
您获得全局坐标,因为 GetCursorPos()
是相对于屏幕的。要将其转换为应用程序坐标,只需在由 GetCursorPos()
填充的 POINT 结构上使用 ScreenToClient()
。
在此处查看文档:https://msdn.microsoft.com/en-us/library/windows/desktop/dd162952%28v=vs.85%29.aspx