我在Windows上使用带有wxTaskBarIcon的弹出菜单(wxWidgets-2.8.9)。 如果我用弹出项目填充弹出菜单,它们在单击时不会改变状态。 弹出菜单列表中的第一项标记为已选中。但是选择任何其他项目并不会改变这一点。
目前没有项目点击事件处理程序(应用程序更像UI原型)。我应该手动更新此处理程序中的项目检查状态还是仍然是框架职责?
答案 0 :(得分:1)
您应该使用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());
}