2009-03-10 9 views
0

私はウィンドウ(wxWidgets-2.8.9)でwxTaskBarIconのポップアップメニューを使用しています。 ポップアップメニューにラジオの項目を入力すると、クリックしたときの状態は変わりません。 ポップアップメニューリストの最初の項目が選択済みとしてマークされています。しかし、他の項目を選択してもこれは変わりません。ポップアップメニューのラジオアイテムチェック

現在、アイテムクリックイベントハンドラはありません(アプリケーションはUIプロトタイプのようです)。このハンドラでアイテムのチェックステータスを手動で更新すべきか、それともフレームワークの任務ですか?

答えて

1

メニュー項目のチェック/チェック解除と有効/無効にはEVT_UPDATE_UI(yourCommandID, yourEventHandler)を使用してください。 UpdateUIイベントハンドラで、アイテムが有効になっているケースを指定する必要があります。 あなたは、コマンドID_RADIO_1とID_RADIO_2でグループをラジオボタンしていると、彼らは条件bool m_SomeConditionVariableに応じて、チェックする必要があり、あなたが

void OnRadio1UpdateUI(wxUpdateUIEvent & event) 
{ 
    event.Checked(m_SomeConditionVariable == true); 
} 

void OnRadio2UpdateUI(wxUpdateUIEvent & event) 
{ 
    event.Checked(m_SomeConditionVariable == false); 
} 

のような彼らのために2つのイベントハンドラを作成する必要があり、変数がfalseの場合にのみ、この場合には最初のラジオ項目がチェックされます変数がtrueのときに2番目の変数がチェックされます。

変数を保存するために計算された条件を使用することもできます。

void OnRadio2UpdateUI(wxUpdateUIEvent & event) 
{ 
    // Item will be enabled only when text control has non-empty value 
    event.Enabled(!m_SomeTextCtrl->GetValue().Trim().IsEmpty()); 
} 
+0

1つの問題があります。私はこのラジオグループ(サブメニューにあります)を動的に形成すると考えています(スタートアップのどこかから読み込んだタイムアウトリストのようなものです)。 – jonny

+0

Connect()メソッドを使用して、動的にイベントハンドラをwxFormに追加することができます。 rmenu項目を作成するときには、識別子を作成するためにwxNewId()を使用し、イベントハンドラをこれらの識別子に接続することができます。 ポップアップメニューを閉じた後、これらのイベントハンドラを切断する必要があります。 –

関連する問題