我现在正在做一个编辑器,我需要在BGI上做一个可点击的按钮(它必须在它上面)。
现在我做了一些事情,比如使用outtextxy
,给出坐标然后我使用if
和mousex
得到的坐标mousey
,如果它等于来自outtext
的坐标,它完成了它的工作。
对我来说仍然不够好,我想创建一个函数,当我使用outtext
时,它会同时创建我所做的if
条件(手动放置{每个if
的{1}}条件是一个大规模的编码工作。)
有人可以通过向我展示如何执行此功能来帮助我吗?
答案 0 :(得分:0)
BGI从未被设计为窗口/窗口小部件管理器 - 它是一个低级原始库。为了做你想做的事,你需要在顶层实现一种形式的WM。
只需添加按钮,您只需要一个按钮类,它封装一个按钮的位置,用于绘制按钮的代码,用于确定(x,y)坐标是否位于按钮内的代码,按钮绘制状态(悬停,按下,正常)和点击事件。
然后,在主循环中,您需要遍历所有按钮以查看鼠标(x,y)是否位于按钮内。如果鼠标事件是单击,则调用按钮的单击事件。
您的应用程序中的任何其他窗口小部件类型也是如此,例如文本/编辑窗口。这就是所有窗口/窗口小部件管理器的工作方式。
在应用程序中实现此功能的方式完全取决于您。我推荐一个简单的std::vector<BGIWidget>
(或者你命名的小部件超类)。然后你需要做的就是遍历你的小部件列表来处理绘图,鼠标悬停/进入/离开/点击事件等事情。