C GUI系统实现
我将制作一个非常简单的GUI工具包。该工具包中的两个元素是矩形和圆形按钮。我有两个问题:C GUI系统实现,c,algorithm,user-interface,drawing,x11,C,Algorithm,User Interface,Drawing,X11,我将制作一个非常简单的GUI工具包。该工具包中的两个元素是矩形和圆形按钮。我有两个问题: #1 如果在圆上有一个位掩码,一个绘图索引系统,或者完全其他的东西,会更有效吗 所谓“绘制索引系统”,我指的是在画布上“绘制”GUI元素,就像一个输入掩码(每个“像素”要么是一个空指针,要么是一个指向按钮的指针),每当窗口大小改变时都会更新它。无论何时发生输入事件(比如悬停事件),您都会: 获取光标位置 计算输入画布上该点的索引(就像处理图像一样) 从该索引检索指向相应GUI元素的指针 #2 应如何
#1 如果在圆上有一个位掩码,一个绘图索引系统,或者完全其他的东西,会更有效吗 所谓“绘制索引系统”,我指的是在画布上“绘制”GUI元素,就像一个输入掩码(每个“像素”要么是一个空指针,要么是一个指向按钮的指针),每当窗口大小改变时都会更新它。无论何时发生输入事件(比如悬停事件),您都会:
- 获取光标位置
- 计算输入画布上该点的索引(就像处理图像一样)
- 从该索引检索指向相应GUI元素的指针
#2 应如何实施这些要素?基本上,一旦确定了元素,应该如何处理输入?我应该:
- 在实际帧缓冲区上绘制一些内容,然后运行回调(如果存在指针)以获取功能
- 启动“悬停”回调,该回调可能决定是否在帧缓冲区上绘制
我希望尽可能避免OOP
对于任何认为这个问题模糊不清的人来说,它要求显示或找到一个简单GUI工具包的最佳(如果有)实现,其中唯一的元素是一个矩形和圆形按钮,如上所述 本质上,我是在问: 给定一组任意元素的位置/大小以及光标位置,确定光标当前与哪个元素相交的最快方法是什么
为了创建自己的GUI工具包,您有几个可用选项 1。使用第三方库:
- 我推荐
- 在你问之前,这是一个C语言库
- 使用此库,您可以轻松创建任何按钮。要回答您的问题,您可以使用此库引发事件并创建处理程序
- 有关此库的详细信息,请访问:
- 有关详细信息,请访问此网站:
- 我们知道如果(x,y)在圆内,(x,y)和(a,b)之间的距离应该小于半径(r)
- 如果大于半径,则点(x,y)显然位于圆外
- 在矩形的
(x,y)和(a,b)中心之间的短距离内 (p,q)=>矩形的任意一个顶点 L=>(a,b)和(p,q)的长度 m1=>L的斜率 r=>包围矩形的圆的半径 在创建矩形时,上述所有值只需计算一次 现在显示随光标变化的值: (x,y)=>光标的位置 dist=>在(x,y)和(a,b)之间的距离 m2=>距离斜率 要求(1,2)和(3,4)的斜率,请使用公式
在此之后,找到线L和线距离之间的角度 o=>距离和L之间的角度 要找到坡度为m1和m2的两条直线之间的角度,请使用公式: 在使用基本三角法之后,我们知道slope(m)=(4-2)/(3-1)
其中z是图中所示的距离z=L*cos(o)
则光标相交,否则不相交如果z=>dist
注意:你可能想知道这是一个非常复杂的数学问题,但这是最简单的方法,大多数值只需计算一次,而且不需要循环,因此可以在O(1)时间内完成。GUI工具包是人类活动的一个分支,OOP似乎是不可避免的。是的,然而,我只想知道用不同形状或不透明度的元素实现GUI的最有效方法。R树和索引系统看起来都不是实现GUI的好方法。真的吗?没有任何解释的否决票?不管是谁做的,你至少可以举出原因。我想,问题的症结在于你的问题非常模糊,不承认权威的规范答案,但我当然无法理解他们的想法。谢谢你的建议,但我已经知道GTK、Qt、wxWidgets、FLTK和其他。我这样做是为了学习GUI系统的工作原理,以及如何使用最有效的方法正确地完成它。我的GUI中只存在这两个元素的原因是,几乎所有其他GUI元素都可以使用它作为基础。在我看来,“graphics.h”是DOS的库:/。它不处理输入。我不想使用库,而是想创建自己的尽管很简单的库。graphics.h不是GUI工具包,而是编译器中可用的标准头文件。另外,请检查一下,我不想直接操作硬件(这是驱动程序的工作),而只是正确地处理输入。我编辑了我的问题。请参见底部的黄色部分。(a , b) => location on circle's center (x, y) => location of cursor r => radius of circle