User interface 编程自定义GUI OPenGL
我正在OpenTK中创建自己的GUI 例如,我想在光标位于某个GUI控件中时触发鼠标事件。我该怎么做?因为现在我只是遍历main类中的项目列表,在Opentk窗口的MouseMove事件中,我只是检查鼠标坐标是否在我正在绘制的组件的“区域”内 目前这是可行的,但我认为可以用更好的方式。这样,我的代码是无序的,在主类中,我更希望它在特定的组件类中 我希望将一个事件附加到GUI的每个组件上,以便为一个组件定义多个事件User interface 编程自定义GUI OPenGL,user-interface,opengl,opentk,User Interface,Opengl,Opentk,我正在OpenTK中创建自己的GUI 例如,我想在光标位于某个GUI控件中时触发鼠标事件。我该怎么做?因为现在我只是遍历main类中的项目列表,在Opentk窗口的MouseMove事件中,我只是检查鼠标坐标是否在我正在绘制的组件的“区域”内 目前这是可行的,但我认为可以用更好的方式。这样,我的代码是无序的,在主类中,我更希望它在特定的组件类中 我希望将一个事件附加到GUI的每个组件上,以便为一个组件定义多个事件 我的意思是,我希望有一个按钮组件,我可以覆盖或只是使用一个在事件发生时激发的方法。
我的意思是,我希望有一个按钮组件,我可以覆盖或只是使用一个在事件发生时激发的方法。与OpenGL的窗口相同,您可以在其中覆盖事件。这不是一个完整的答案,因为您的问题相当广泛,但我希望它能有所帮助 为了实现这样一个系统,以下是潜在设计的核心组件: UI组件:某种标准接口,不同的组件类型可以定义交互逻辑。根据语言的不同,最常见的方法可能类似于父类组件,其中包含要重写的方法。这些可能包括:
- 鼠标悬停
- 鼠标单击(新闻/发布)
- 点击拖动
- 确定组件位置的某种方法。可以提供一个边界框,或者一个测试给定点是否在该组件内的方法
- 用于绘制零部件的信息或功能
- 显示和分层设置(如果在其他组件的顶部或后面绘制,它是可见的还是隐藏的)
- 管理组件(添加/删除/修改)
- 如何绘制整个上下文(例如,在每个组件上循环并为每个组件执行绘制功能)
- 事件处理(见下一节)
功能TK\u事件\u点击按下(点){
对于上下文中的组件{
如果组件.ContainsPoint(点){
component.EventClickPressed()
}
}
}
在我看来,这实际上是设计中比较棘手的部分,因为在基于组件的UI如何工作方面存在一些棘手的约定。您不一定要遵循它们,但至少要注意它们,因为这可能是人们期望您的UI工作的方式:
- 单击按后,单击拖动将继续进行,直到单击释放,即使光标离开组件区域
- “操作”发生在单击发布时
- 单击释放仅在相同组件上发生相应的单击按下时才会执行操作
- 如果光标不再位于组件内部,则单击释放不会执行任何操作(不过,在释放前离开并重新进入组件仍会执行该操作)
- 一次只能主动单击一个组件(顶部显示的组件),即使多个组件在该点重叠
有了这些系统,您只需创建一个窗口,创建一个UI上下文,将适配器层注册到窗口以对该上下文进行操作,设置窗口以在框架上绘制上下文,然后使用该上下文添加/删除/修改程序中的组件。看起来您已经描述了一个合理的设计。你试过实现它吗?你遇到什么问题了吗?@HymnsForDisco问题是,我不知道怎么做。我想到了我希望它是怎样的,但不是怎样做。你知道吗?谢谢!我可以从这开始