我对wxWidgets中的ID如何工作有点困惑,我是否必须确保我创建的所有窗口中的所有id对于每个自己的函数都是唯一的?就像我有两个wxID_OK用于两个不同的对话框一样,他们会开始在其他窗口中触发事件,因为它们共享相同的ID?
目前我一直在维护一个巨大的枚举来获取我的ID,但这看起来有点傻,并且想知道我是否只是对实际发生的事情有误解。
答案 0 :(得分:2)
我现在正在使用id。我对所有小部件使用wxID_ANY并使用小部件指针进行标识。这也适用,所以没有理由为同一个小部件提供两个id。可能会有一些极端情况需要真正的身份证但我还没有找到任何身份证。
答案 1 :(得分:1)
最好在每个顶级窗口中使用唯一ID(即wxFrame
或wxDialog
),因为控件在wxCommandEvent
中包含了ID生成和命令事件向上传播到窗口层次结构,直到它们到达第一个顶级窗口,如果有两个控件具有与其公共父窗口中定义的任何处理程序相同的ID,则可能会感到困惑,需要小心区分它们
但是,在不同的对话框中重复使用ID没有限制。
更好的想法是不要使用任何非标准ID,只需让wxWidgets为您生成它们,方法是在创建控件时指定wxID_ANY
并使用Bind()
连接事件处理程序而不是事件表中的ID。