- コンボボックスの使い方 -



コンボボックスを使う為の大まかな処理の流れは以下になります。

--------・--------・--------・--------・--------
1.ダイヤログにコンボボックスを追加
2.コンボボックスのドロップダウンリストのサイズ変更
3.OnInitDialog()関数でコンボボックスの初期化
4.コンボボックスの選択されている項目を取得
--------・--------・--------・--------・--------



コンボボックスに項目を追加するには CComboBoxクラスのInsertStringメンバー関数を使います


□ MSDNよりInsertString の引用 □

 int InsertString(
   int nIndex,
   LPCTSTR lpszString
 );

  ・nIndexは文字列を挿入するリスト ボックスの位置を
   0 から始まるインデックスで指定
   この引数を -1 にすると、文字列をリストの最後に追加

  ・lpszStringは挿入する NULL で終わる文字列へのポインタ

  ・戻り値は文字列が挿入された位置の 0 から始まるインデックス
   エラーが発生した場合は、CB_ERR を返します





コンボボックスで現在選択されている項目の取得にはCComboBoxクラスのメンバー関数GetCurSelと、GetLBText を使います
GetCurSelで現在選択されているインデックスを取得
GetCurSelで取得したインデックスを使いGetLBTextで選択文字列の取得


□ MSDNよりGetCurSel、GetLBTextの引用 □

 int GetCurSel( ) const;

  ・引数はなし

  ・戻り値はコンボ ボックスのリスト ボックスで
   現在選択されている項目の 0 から始まるインデックス
   選択されている項目がない場合は、CB_ERR を返します



 void GetLBText(
  int nIndex,
  CString& rString
 ) const;

  ・nIndexはコピーするリスト ボックス文字列を 0 から始まるインデックス
  ・rStringはCString への参照

  ・戻り値は文字列の終わりを示す NULL 文字を除く
   文字列の長さ (バイト数) を返します







≪ MFC ダイアログベースでの作成サンプル ≫



 ■ダイアログにコンボボックスを追加

      

      サンプルではボタンIDをIDC_BUTTON、
      コンボボックスのIDをIDC_COMBOとします







 ■コンボボックスをクリックしてドロップダウンリストのサイズを変更

      









 ■ClassWizardよりボタンのクリックイベント関数を作成

      クラス名 → C***Dlg
      オブジェクトID → IDC_BUTTON
      メッセージ → BN_CLICKED







 ■OnInitDialog()でコンボボックスの初期化
///////////////////////////////////
// CTest12Dlg メッセージ ハンドラ

BOOL CTest12Dlg::OnInitDialog()
{
CDialog::OnInitDialog();

// "バージョン情報..." メニュー項目をシステム メニューへ追加します。

// IDM_ABOUTBOX はコマンド メニューの範囲でなければなりません。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL){
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty()){
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// このダイアログ用のアイコンを設定します。フレームワークはアプリケーションのメイン
// ウィンドウがダイアログでない時は自動的に設定しません。
SetIcon(m_hIcon, TRUE); // 大きいアイコンを設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンを設定

// TODO: 特別な初期化を行う時はこの場所に追加してください。


//-------コンボボックスの初期化(ここから)

//コンボボックスのポインタを取得
CComboBox* pCB = (CComboBox*)GetDlgItem(IDC_COMBO);

//コンボボックスの初期値を設定
pCB->InsertString(-1,"コンボボックス1");
pCB->InsertString(-1,"コンボボックス2");
pCB->InsertString(-1,"コンボボックス3");

//-------コンボボックスの初期化(ここまで)

return TRUE; // TRUE を返すとコントロールに設定したフォーカスは失われません。
}








 ■ボタンクリックイベント関数にコードを追加
void CTest12Dlg::OnButton()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください

//現在選択されている項目のインディックス
int combo_number;

//コンボボックスの文字列格納用変数を作成
CString combo_msg;

//コンボボックスのポインタを取得
CComboBox* pCB = (CComboBox*)GetDlgItem(IDC_COMBO);

//CComboBoxクラスのメンバー関数GetCurSel関数を使い選択されているインデックスを取得
combo_number = pCB->GetCurSel();

//インデックス取得エラーチェック
if(combo_number != CB_ERR){
//CComboBoxクラスのメンバー関数GetLBTextを使い選択されている項目の文字列を取得
pCB->GetLBText (combo_number,combo_msg);

//メッセージボックスに取得した文字列を表示
MessageBox(combo_msg,"コンボボックスの文字列");
}
}







 ■以上、コンパイルすれば完成