我有一个小型应用程序,如果某些事件发生在较低级别,例如套接字脱机或类似情况,它需要更新 GUI 元素。
在 Windows 中,我可以使用 PostMessage,它将通过链发送到所有 Windows,并且所需的可以相应地更新。
如何在 wxWidgets 中实现类似的功能?我不能使用 OnUpdateUI 或类似的东西,因为某些控件似乎根本无法处理。
目标窗口可以是一个或多个,它们可以是框架或控件,所以我在这里有点困惑。
有人有建议吗?
我有一个小型应用程序,如果某些事件发生在较低级别,例如套接字脱机或类似情况,它需要更新 GUI 元素。
在 Windows 中,我可以使用 PostMessage,它将通过链发送到所有 Windows,并且所需的可以相应地更新。
如何在 wxWidgets 中实现类似的功能?我不能使用 OnUpdateUI 或类似的东西,因为某些控件似乎根本无法处理。
目标窗口可以是一个或多个,它们可以是框架或控件,所以我在这里有点困惑。
有人有建议吗?
首先,所有控件都接收EVT_UPDATE_UI
,因此您可以使用它,而且这样做非常简单——但也是最低效的,因此绝对不推荐用于套接字事件处理之类的东西(检查套接字是否已连接或虽然不是)。
其次,与 Windows 完全等价的::PostMessage()
是wxQueueEvent()
(实际上它曾经被称为wxPostEvent()
但新版本更可取)。wxQueueEvent()
从某种意义上说,它是线程安全的,它可以从辅助线程用于将事件发布到由主线程管理的 GUI 控件。
您可以使用与 Win32 应用程序相同的方法。您可以使用 wxPostEvent 函数创建自定义事件类并将其发送到窗口。有一些关于此的文档。
不确定您对 wxUpdateUIEvent 的含义 - 根据我的经验,它工作得很好。什么控件不接收呢?您是否将 EVT_UPDATE_UI() 宏添加到事件表?