我正在创建一个包含1到多个OpenGL视图表单的GUI。现在基础工作正常,我有一个Viewer Forms列表,每个都在其设计器类中封装了一个OpenTK.GLControl成员。
我需要在拖动图标的窗口中获取实际光标位置,这样当我释放左键时,它会将其放入该位置的GL窗口中。这简化了它实际需要做的事情,但作为第一步,一旦发生这种情况,其余部分将很容易实现。
现在,当我使用GLControl.MousePosition.X,GLControl.MousePosition.Y来获取光标位置时,它实际上给出了屏幕位置,而不是窗口中的位置。不幸的是,这对我需要做的事情并不是特别有用。
我看过OpenTK.GameWindow.Mouse,这似乎在我的小测试项目中运行得非常好。它得到了光标在窗口中的确切位置。但是,我不能在这个项目中使用游戏窗口,因为游戏窗口没有GLcontrol所具有的一些GUI形式友好的东西,如Dock,TabIndex,Paint和其他GUI相关成员。 (或者至少我似乎找不到任何方式让GameWindow支持他们,如果我错了就告诉我)
所以我真正要问的是,有没有人有一个非常好/简单的方法让我使用OpenTK.GLControl获取光标的窗口位置
事实上,即使它很棘手,请告诉我:)我只需要能够做到这一点!
答案 0 :(得分:2)
你的问题不在OpenGL的范围之内,只涉及绘制东西和OpenTK,它将OpenGL粘合到.net上。这是Windows窗体的问题。 Windows窗体有一个类Control
,其方法→PointToClient可用于从屏幕转换为客户端坐标。如果在GTK中使用OpenTK,则对于GLWidget / Widget类也是类似的。