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

标签 c++ user-interface directx

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

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

我创建了一个基类 GUIObject,所有对象都继承自该基类。它包括诸如大小和焦点之类的基础知识。然后派生类,例如 GUILabel,都定义了 render()、update() 等。

我的问题是如何处理事件,比如点击?我让它与 GUILabel::Click() 一起使用,根据当前实例的文本成员值定义每种可能性。感觉不对,我意识到需要单击的每个标签都必须在 GUILabel 类中定义。我想将其移至每个游戏状态的代码中。

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

我可以在游戏状态中定义 GUILabel(或按钮,或其他什么)的派生并覆盖我需要的任何操作吗?然后对我在该状态下需要的任何控件执行此操作?

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

最佳答案

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

关于C++ GUI事件/消息传递设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6391612/

相关文章:

c++ - 为什么叫 bool casting?

android - 在 onPause 或后台时更新 UI

java - ListView 中的切换控件获取 UnsupportedOperationException : addView(View, LayoutParams) 在 AdapterView 中不受支持

c++ - 没有编译的可执行文件

c++ - 检查模板函数是否存在

c++ - 使用 Poco Net 发送电子邮件时暂停

c++ - 使用 Dev C++ 在 C++ 中使用 RapidXML 编译错误

node.js - Node 应用程序是否有任何独立的 gui 模块

android - 如何在跨平台(Windows、iOS、Android)C++ 应用程序中表示字符串?

C++ Directx 11 多显卡