2016-10-13 7 views
0

wxMenuにラジオアイテムのグループがあるとします。私はこれらのうちの1つがいつでもチェックされることを知っています。wxMenuの選択したラジオアイテムを見つける

wxMenuまたはその他の構造体がチェックされた項目のインデックスを保持しているか、チェックされた要素がインデックスを見つけるまで各ラジオ項目のisCheckedを呼び出す必要がありますか?

私はthis questionにそれを行う方法を尋ねましたが、私はwxWidgetsがどこからでもそのことを救ってほしいと思っています。

答えて

1

いいえ、(ravenspoint's answerに示すように)最後に選択した項目のインデックスを保存したり、選択したラジオボタンを見つけるまでwxMenuBarBase::IsChecked()を使用すると、それを行うための唯一の方法です。

現在選択されているボタンへのアクセスを提供するには、それを保存するだけでなく、選択した変更が反映されるだけでなく、アイテムがメニューに挿入/削除されるときも更新することを忘れることはありません。それはまだ完全に自明ではありませんが)あなたが興味を持っているラジオアイテムグループに何らかの形でアクセスできるようにするには、それを識別できる必要があります。現在、それを行う方法はなく、追加することは特にありませんシンプル。

何ができるか簡単、しかし、与えられたアイテムで開始し、その後の項目にIsChecked()を呼び出し、それがtrueを返すまでのアイテムのオフセット返す再利用可能な機能int GetIndexOfSelectedRadioItem(int firstItem)を書いています。独自のコードで実行できるはずですが、そのような関数をwxWidgets自体に含める場合は(おそらくstatic 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

これは私の現在の解決策です。私はもっ​​と美しいものを望んでいた。 –

関連する問題