c# - 在 OpenTK 中获取鼠标窗口坐标 (C#~.NET)

标签 c# .net opengl opentk mouse-coordinates

我正在创建一个具有 1 到多个 OpenGL View 窗体的 GUI。现在基础工作正常,我有一个查看器表单列表,每个表单都在其设计器类中封装了一个 OpenTK.GLControl 成员。

我需要获取我将图标拖到的窗口中的实际光标位置,以便当我释放左键单击时,它会在该位置放入 GL 窗口。这简化了它实际需要做的事情,但这只是第一步,一旦发生,剩下的就很容易了。

现在,当我使用 GLControl.MousePosition.X、GLControl.MousePosition.Y 获取光标位置时,它实际上给出了屏幕位置,而不是窗口中的位置。不幸的是,这对我需要做的事情不是特别有用。

我查看了 OpenTK.GameWindow.Mouse,这在我的小测试项目中似乎非常有效。它获取光标在窗口中的确切位置。但是,我不能在这个项目中使用 gamewindow,因为 gamewindow 没有 GLcontrol 具有的一些对 GUI 形式更友好的东西,例如 Dock、TabIndex、Paint 和其他 GUI 相关成员。 (或者至少我似乎无法找到任何方式让 GameWindow 支持它们,如果我错了请告诉我)

所以我真正想问的是,有没有人有一个非常好的/简单的方法让我使用 OpenTK.GLControl 获取窗体中光标的窗口位置

事实上,即使它很棘手也请告诉我 :) 我只需要能够做到!

最佳答案

您的问题超出了 OpenGL 的范围,OpenGL 只处理绘图内容,而 OpenTK 将 OpenGL 粘合到 .net。这是Windows窗体的问题。 Windows 窗体有一个 Control 类,它有一个方法 →PointToClient您可以使用它从屏幕坐标转换为客户端坐标。如果将 OpenTK 与 GTK 一起使用,则 GLWidget/Widget 类的情况类似。

关于c# - 在 OpenTK 中获取鼠标窗口坐标 (C#~.NET),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7795068/

相关文章:

c# - 获得新的 access_token 后如何更新我的 cookie?

c# - 在不使用 IUserType 查询数据库时如何防止 NHibernate SqlDateTime 溢出?

c# - .NET XmlSerializer 编译类型模式读取器/写入器

c++ - 在xz平面opengl中绘制场景

c# - 在 C# 中为大文件创建校验和的最快方法是什么

c# - 如何通过 foreach 循环获取 FileInfo?

c# - 在 C# 函数中键入 'string' 作为参数

.net - 如何对 ToolStripStatusLabel 进行跨线程调用?

c++ - 用于渲染 3d 球体的纹理坐标

c++ - 将函数调用保存在容器中