我在Windows上使用带有wxTaskBarIcon的弹出菜单(wxWidgets-2.8.9)。 如果我用弹出项目填充弹出菜单,它们在单击时不会改变状态。 弹出菜单列表中的第一项标记为已选中。但是选择任何其他项目并不会改变这一点。

目前没有项目点击事件处理程序(应用程序更像UI原型)。我应该手动更新此处理程序中的项目检查状态还是仍然是框架职责?

有帮助吗?

解决方案

您应该使用 EVT_UPDATE_UI(yourCommandID,yourEventHandler)来检查/取消选中和启用/禁用菜单项。 在UpdateUI事件处理程序中,您应指定启用项目的情况 例如。你有一个带有命令ID_RADIO_1和ID_RADIO_2的radiobutton组,应根据条件 bool m_SomeConditionVariable 检查它们,然后你应该为它们创建2个事件处理程序,如

void OnRadio1UpdateUI(wxUpdateUIEvent & event)
{
    event.Checked(m_SomeConditionVariable == true);
}

void OnRadio2UpdateUI(wxUpdateUIEvent & event)
{
    event.Checked(m_SomeConditionVariable == false);
}

在这种情况下,只有当变量为false时才会检查第一个无线电项目,当变量为真时,将检查第二个无线电项目。

您也可以使用存储变量的计算条件instal。例如

void OnRadio2UpdateUI(wxUpdateUIEvent & event)
{
    // Item will be enabled only when text control has non-empty value
    event.Enabled(!m_SomeTextCtrl->GetValue().Trim().IsEmpty());
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top