查找 wx菜单的选定单选项
Finding a wxMenu's Selected Radio Item
假设在wxMenu
中有一组单选项。我知道,在任何给定的时间,这些选项中只有一个会被检查。
wxMenu
或其他结构是否保留已检查项的索引,或者我是否需要在每个无线电项上调用isChecked
,直到我找到已检查的元素以找到它的索引?
我已经问过this question
关于如何做到这一点,但我更喜欢wxWidgets使我免于到处这样做。
不,保存最后选中项目的索引(如ravenpoint的答案所示)或使用wxMenuBarBase::IsChecked()
直到找到选中的单选按钮是唯一的方法。
wxWidgets提供访问当前选中的按钮不仅需要存储它(这意味着不仅不能忘记更新时选择的变化,而且当物品插入/删除菜单,所以它已经不完全微不足道),但以某种方式提供收音机你感兴趣的项目小组,需要能够识别它,目前没有方法和添加它不会特别简单。
然而,可以很容易地做的是编写一个可重用的函数int GetIndexOfSelectedRadioItem(int firstItem)
,它将从给定的项目开始,并对后续的项目调用IsChecked()
,直到返回true并返回项目的偏移量。你应该能够在你自己的代码中做到这一点,但是如果你想在wxWidgets本身中包含这样的函数(作为一个静态wxMenuBar
方法,可能),请不要犹豫,发送补丁/拉请求做它!
很容易自己动手。
为每个按钮绑定一个事件处理器到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();
相关文章:
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- Win32编译器选项和内存分配
- C/C++预处理器是否可以检测一些编译器选项
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 通过选项卡的文本设置QTabWidget顺序
- 通过ccmake在cmake中缓存依赖选项
- 如何传递多个 std::文件系统选项?
- 基于编译器选项的编译二进制路径
- "perf_event_attr"结构的"read_format"属性的选项到底是什么?
- 如何应用 libcurl 的持久连接选项
- Qt-在选项卡小部件中显示表单
- 使用IShellDispatch界面更改文件的详细信息选项卡(右键单击时)?
- 动态更新 wxWidgets 单选项
- 提升程序选项 添加选项语法
- 在linux上单开发额外的g++编译器选项
- 根据第一个选项选择选项组
- MFC 的 CTabCtrl::HitTest 函数返回单击的任何选项卡的"1"
- 提升计划选项依赖选项
- 在运行时单击QTabWidget将内容加载到选项卡中