我在 Windows 上使用带有 wxTaskBarIcon 的弹出菜单(wxWidgets-2.8.9)。如果我用单选项目填充弹出菜单,单击时它们不会改变状态。弹出菜单列表中的第一项被标记为选中。但是选择任何其他项目不会改变这一点。
目前没有项目点击事件处理程序(应用程序更像是 UI 原型)。我应该手动更新此处理程序中的项目检查状态还是仍然是框架职责?
我在 Windows 上使用带有 wxTaskBarIcon 的弹出菜单(wxWidgets-2.8.9)。如果我用单选项目填充弹出菜单,单击时它们不会改变状态。弹出菜单列表中的第一项被标记为选中。但是选择任何其他项目不会改变这一点。
目前没有项目点击事件处理程序(应用程序更像是 UI 原型)。我应该手动更新此处理程序中的项目检查状态还是仍然是框架职责?
您应该EVT_UPDATE_UI(yourCommandID, yourEventHandler)
用于检查/取消检查和启用/禁用菜单项。在您的 UpdateUI 事件处理程序中,您应该指定启用项目的情况例如,您有带有命令 ID_RADIO_1 和 ID_RADIO_2 的单选按钮组,并且应该根据条件检查它们,bool m_SomeConditionVariable
然后您应该为它们创建 2 个事件处理程序,例如
void OnRadio1UpdateUI(wxUpdateUIEvent & event)
{
event.Checked(m_SomeConditionVariable == true);
}
void OnRadio2UpdateUI(wxUpdateUIEvent & event)
{
event.Checked(m_SomeConditionVariable == false);
}
在这种情况下,仅当变量为假时才会检查第一个单选项目,而当变量为真时将检查第二个单选项目。
您也可以使用计算条件而不是存储变量,例如
void OnRadio2UpdateUI(wxUpdateUIEvent & event)
{
// Item will be enabled only when text control has non-empty value
event.Enabled(!m_SomeTextCtrl->GetValue().Trim().IsEmpty());
}