我正在创建一个具有1到许多OpenGL视图形式的GUI。现在这些基础知识都可以使用了,我有一个Viewer Forms列表,每个Viewer Forms在其设计器类中封装了一个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粘合到.net的绘图内容和OpenTK。这是Windows窗体的问题。 Windows窗体具有带有方法→PointToClient的类Control
,可用于将屏幕坐标转换为客户端坐标。如果将OpenTK与GTK一起使用,则GLWidget / Widget类也是如此。