假設我有一個wxMenu
中的一組無線電項目。我知道在任何時候都會檢查其中的一個。找到一個wxMenu的選定的無線電項目
wxMenu
或其他一些構造是否保留在檢查項目的索引上,還是我需要調用每個無線電項目上的isChecked
,直到找到檢查的元素來找到它的索引?
我問了this question
關於如何做到這一點,但我更喜歡wxWidgets救了我無處不在。
假設我有一個wxMenu
中的一組無線電項目。我知道在任何時候都會檢查其中的一個。找到一個wxMenu的選定的無線電項目
wxMenu
或其他一些構造是否保留在檢查項目的索引上,還是我需要調用每個無線電項目上的isChecked
,直到找到檢查的元素來找到它的索引?
我問了this question
關於如何做到這一點,但我更喜歡wxWidgets救了我無處不在。
號,保存最後選定項目的索引(如圖ravenspoint's answer)或使用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();
是的,這是我目前的解決方案。我希望有更美麗的東西。 –