リボンでのコンボボックスの使い方
2014年5月7日:MFC
コンボボックスは、登録した要素の中から、特定の要素を選ぶことのできるものです。
このコンボボックスをMFCのリボンで使う方法を紹介します。
リボンへ追加
まず、ツールボックスから、コンボボックスをリボンに入れましょう。
そして、プロパティを設定します。
- ID:名前です。ここではID_COMBOとします。
- Prompt:「説明\nタイトル」の形式で入力すると、マウスを持ってきた際に表示されます。
- Width:コンボボックスの幅です。
変数の宣言
MainFrm.cppの
//CMainFrameコンストラクション・デストラクション
の直下に
CMFCRibbonComboBox* pFCom;
として変数を設定します。そして、OnCreateのm_wndRibbonBar.LoadFromResource(IDR_RIBBON);の下に、
pFCom = DYNAMIC_DOWNCAST(CMFCRibbonComboBox,m_wndRibbonBar.FindByID(ID_COMBO));
と記述します。これでコンボボックスのポインタを取得できたことになります。
次に、「アプリ名View.h」の一番下の行に
extern CMFCRibbonComboBox* pFCom;
という記述をいれて、つなぎます。
初期設定
いよいよ、コンボボックスの操作をします。
初期化するメソッドOnInitialUpdate内で
pFCom->AddItem(“要素1”);
pFCom->AddItem(“要素2”);
により要素1と要素2を入れます。そして、
pFCom->SelectItem(0);
により、0番目の「要素1」を選択した状態にします。
イベント
次に、コンボボックスのイベント設定を行います。リボンの編集が面へ移動して、コンボボックスを右クリックします。そして、イベントハンドラーの追加を選択します。
- クラス一覧:「アプリ名View」
- メッセージの種類:COMMAND
とします。これで、コンボボックスをクリックした際のイベントが追加されました。
このメソッドの中に
int n=pFCom->GetCurSel(); if(n>=0){ pFCom->DeleteItem(n); pFCom->SelectItem(0); }else{ AfxMessageBox("消去するファイルを選択してください。"); }
と記述します。これで、選択した要素を消去することができます。
GetCurSel();
で選択中の要素番号が得られます。そして
DeleteItem(n);
により要素nが消去されます。そして、
SelectItem(0);
で要素0を選んでいます。
続いて、コンボボックスの要素が変化した際の動作を記述します。前と同様の操作で
- クラス一覧:「アプリ名View」
- メッセージの種類:UPDATE_COMMAND_UI
とします。すると、値を変更した際のイベントメソッドが追加されます。
ここにどのようなときにコンボボックスが使えるかを記入します。
pCmdUI->Enable(true);
で使える状態になります。
pCmdUI->Enable(false);
で使えない状態です。ここでは
if(pFCom->GetCurSel()>=0){ pCmdUI->Enable(true); }else{ pCmdUI->Enable(false); }
とします。これにより、要素があるときは有効ですが、要素がなくなると無効になります。
以上で、プログラムは完成です。
コンボボックスに要素1と要素2があり、コンボボックスで選択すると消去されます。
そして、0になるとコンボボックスは無効化されます。
機会があればコンボボックスを使ってみてください。
著者:安井 真人(やすい まさと)
@yasui_masatoさんをフォロー