【问题标题】:wxWidgets widget IDswxWidgets 小部件 ID
【发布时间】:2015-05-14 21:10:54
【问题描述】:

我对这些 ID 在 wxWidgets 中的工作方式有点困惑,我是否必须确保我创建的所有窗口中的所有 ID 对于它们自己的每个函数都是唯一的?就像我有两个用于两个不同对话框的 wxID_OK 一样,它们是否会因为它们共享相同的 id 而开始在其他窗口中触发事件?

目前我一直在维护一个庞大的枚举来获取我的 ID,但这似乎有点愚蠢,我想知道我是否对实际发生的事情有误解。

【问题讨论】:

    标签: c++ wxwidgets


    【解决方案1】:

    我现在更不愿意使用 id。我对所有小部件使用 wxID_ANY,并使用小部件指针进行标识。这同样有效,因此没有理由为同一个小部件设置两个 id。可能存在一些需要真实身份的极端情况,但我没有找到。

    【讨论】:

      【解决方案2】:

      在每个顶级窗口(即wxFramewxDialog)内使用唯一ID 是个好主意,因为控件在它们生成的wxCommandEvents 中包含它们的ID,并且随着命令事件向上传播窗口层次结构,直到它们到达第一个顶级窗口,如果有 2 个具有相同 ID 的控件,因为它们的公共父窗口中定义的任何处理程序需要小心区分它们,这可能会令人困惑。

      但是,在不同的对话框中重复使用 ID 没有任何限制。

      一个更好的主意是根本不使用任何非标准 ID,而只是让 wxWidgets 通过在创建控件时指定 wxID_ANY 并使用 Bind() 连接事件处理程序而不是在事件表。

      【讨论】:

      • 对,但您不需要绑定 ID 吗?
      • 可以使用Bind() 和父级上的ID,在这种情况下,您确实仍然必须使用唯一ID(否则您将如何区分它们),但通常你在对象本身上调用Bind(),然后你的处理程序只接收来自这个特定对象的事件,根本不需要处理ID。
      猜你喜欢
      • 2011-09-14
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 2010-10-26
      • 1970-01-01
      相关资源
      最近更新 更多