リボンでのコンボボックスの使い方

コンボボックスは、登録した要素の中から、特定の要素を選ぶことのできるものです。

このコンボボックスをMFCのリボンで使う方法を紹介します。

リボンへ追加

まず、ツールボックスから、コンボボックスをリボンに入れましょう。

コンボボックスの挿入

そして、プロパティを設定します。

  1. ID:名前です。ここではID_COMBOとします。
  2. Prompt:「説明\nタイトル」の形式で入力すると、マウスを持ってきた際に表示されます。
  3. 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」を選択した状態にします。

 

イベント

次に、コンボボックスのイベント設定を行います。リボンの編集が面へ移動して、コンボボックスを右クリックします。そして、イベントハンドラーの追加を選択します。

  1. クラス一覧:「アプリ名View」
  2. メッセージの種類:COMMAND

とします。これで、コンボボックスをクリックした際のイベントが追加されました。

このメソッドの中に

int n=pFCom->GetCurSel();
	
if(n>=0){
	pFCom->DeleteItem(n);
	pFCom->SelectItem(0);
}else{
	AfxMessageBox("消去するファイルを選択してください。");
}

と記述します。これで、選択した要素を消去することができます。

GetCurSel();

で選択中の要素番号が得られます。そして

DeleteItem(n);

により要素nが消去されます。そして、

SelectItem(0);

で要素0を選んでいます。

 

続いて、コンボボックスの要素が変化した際の動作を記述します。前と同様の操作で

  1. クラス一覧:「アプリ名View」
  2. メッセージの種類:UPDATE_COMMAND_UI

とします。すると、値を変更した際のイベントメソッドが追加されます。

ここにどのようなときにコンボボックスが使えるかを記入します。

pCmdUI->Enable(true);

で使える状態になります。

pCmdUI->Enable(false);

で使えない状態です。ここでは

if(pFCom->GetCurSel()>=0){
	pCmdUI->Enable(true);
}else{
	pCmdUI->Enable(false);
}

とします。これにより、要素があるときは有効ですが、要素がなくなると無効になります。

 

以上で、プログラムは完成です。

コンボボックスに要素1と要素2があり、コンボボックスで選択すると消去されます。

そして、0になるとコンボボックスは無効化されます。

機会があればコンボボックスを使ってみてください。

著者:安井 真人(やすい まさと)