2

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

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

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

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

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

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

4

1 回答 1

2

你的问题不在OpenGL的范围之内,它只处理绘图的东西和将OpenGL粘合到.net的OpenTK。这是 Windows 窗体的问题。Windows Forms 有一个Control带有方法→PointToClient的类,您可以使用该方法从屏幕坐标转换到客户端坐标。如果将 OpenTK 与 GTK 一起使用,则 GLWidget/Widget 类也类似。

于 2011-10-17T14:43:03.623 回答