2016-10-13 49 views
0

假設我有一個wxMenu中的一組無線電項目。我知道在任何時候都會檢查其中的一個。找到一個wxMenu的選定的無線電項目

wxMenu或其他一些構造是否保留在檢查項目的索引上,還是我需要調用每個無線電項目上的isChecked,直到找到檢查的元素來找到它的索引?

我問了this question關於如何做到這一點,但我更喜歡wxWidgets救了我無處不在。

回答

1

號,保存最後選定項目的索引(如圖ravenspoint's answer)或使用wxMenuBarBase::IsChecked()直到找到選定的單選按鈕是做它的唯一途徑。

對於wxWidgets提供對當前所選按鈕的訪問權限,它不僅需要存儲它(這意味着不僅要在選擇的更改時進行更新,而且還要在菜單中插入/刪除項目時更新它已經不是完全微不足道的),但以某種方式提供對你感興趣的無線電項目組的訪問,這需要能夠識別它,並且目前沒有辦法做到這一點,並且添加它不是特別的簡單。

可以做些什麼容易,但是,寫一個可重複使用的功能int GetIndexOfSelectedRadioItem(int firstItem)將開始在給定的項目,並在隨後的項目稱之爲IsChecked(),直到返回true,並返回該項目的偏移量。你應該可以在你自己的代碼中做到這一點,但是如果你想在wxWidgets本身包含這樣的功能(可能是靜態的wxMenuBar方法),請不要猶豫,發送修補程序/拉請求!

1

很容易推出自己的。

爲每個按鈕綁定一個事件處理函數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(); 
+0

是的,這是我目前的解決方案。我希望有更美麗的東西。 –

相關問題