查找 wxMenu 的选定单选项

Finding a wxMenu's Selected Radio Item

假设我在 wxMenu 中有一组单选项目。我知道在任何给定时间都会检查其中一个。

wxMenu 或其他构造是否保留选中项的索引,或者我是否需要在每个单选项上调用 isChecked 直到找到选中元素以找到它索引?

我已经问过 如何做到这一点,但我更希望 wxWidgets 让我免于到处这样做。

自己动手很容易。

为每个按钮绑定一个事件处理程序到 wxEVT_COMMAND_RADIOBUTTON_SELECTED。在处理程序中,提取所选单选按钮的 ID 并将其存储在某处。

像这样:

    ResolMenu = new wxMenu();
    ResolMenu->AppendRadioItem(idRcvLoRez,"Low Resolution");
    ResolMenu->AppendRadioItem(idRcvMeRez,"Medium Resolution");
    ResolMenu->AppendRadioItem(idRcvHiRez,"High Resolution");
    ResolMenu->Check( idRcvLoRez, true );
    Bind(wxEVT_MENU,&cFrame::onRcvRez,this,idRcvLoRez);
    Bind(wxEVT_MENU,&cFrame::onRcvRez,this,idRcvMeRez);
    Bind(wxEVT_MENU,&cFrame::onRcvRez,this,idRcvHiRez);


void onRcvRez( wxCommandEvent& event )
{
    myRezID = event.GetId();

不,保存最后选择的项目的索引(如 所示)或使用 wxMenuBarBase::IsChecked() 直到找到所选的单选按钮是唯一的方法。

为了让 wxWidgets 提供对当前选定按钮的访问,它不仅需要存储它(这意味着不要忘记不仅在选定的更改时更新,而且在从 into/deleted 插入项目时更新菜单,所以它已经不是完全微不足道了),但要以某种方式提供对您感兴趣的无线电项目组的访问,这需要能够识别它,目前没有办法做到这一点并且添加它不会要特别简单。

然而,可以轻松 编写一个可重复使用的函数int GetIndexOfSelectedRadioItem(int firstItem),该函数将从给定项目开始并在后续项目上调用IsChecked()直到它 return 为真并且 return 项目的偏移量。你应该能够在你自己的代码中完成它,但是如果你想在 wxWidgets 本身中包含这样的功能(作为静态 wxMenuBar 方法,可能),请不要犹豫发送 patches/pull 请求这样做!