我正在创建一个具有 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/