c ++ GUI事件/消息传递设计

时间:2011-06-17 20:43:37

标签: c++ user-interface directx

所以,我正在使用DirectX 9和C ++制作一个简单的游戏。我看了SDK的GUI,但我想我可以实现更简单的东西。

我想要的只是窗口,标签,按钮,文本框和复选框。

我已经创建了一个基类GUIObject,它都继承自。它包括大小和焦点等基础知识。然后派生类,例如GUILabel,都定义了render(),update()和whatnot。

我的问题是如何处理事件,例如点击?我使用GUILabel :: Click()来定义基于当前实例的文本成员值的所有可能性。感觉不对,我意识到需要点击的每个标签都必须在GUILabel类中定义。我想把它移到每个游戏州的代码中。

所以,我简单地尝试使GUILabel :: Click()将函数指针作为参数。但后来我意识到我需要将状态的类成员方法作为静态(不太可能,除非其中的所有内容都是静态的,对吧?)或者也将它传递给GUIObject类。这是要走的路吗?

我可以在游戏状态中定义GUILabel(或按钮或其他)的派生,并覆盖我需要的任何操作吗?然后为那个州需要的任何控制做到这一点?

实现事件处理的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

您可能希望研究使用boost::signals等信令库,以便灵活地定义GUI对象与每个回调将触发的基础事件之间的接口。对于需要GUI元素(如状态指示器等)以响应基础事件的反向关系,它也可以派上用场。

答案 1 :(得分:1)

对于回调/点击事件,我会使用boost :: function / boost :: bind。 在我的GUI框架中,我曾经有两个不同的抽象类InputHandler和Renderable来处理触摸和渲染。这导致了一种设计,其中不需要点击的组件(如UILabel)不需要实现无用的方法。

HTH, 亚历