Combo Box から選択して Edit Box で表示する

VC++ で Combo Box から選択した都市名を Edit Box に表示します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. 新規プロジェクトで[空のプロジェクト](DlgComb)を作成します。
    [プロジェクト][リソースの追加][Dialog][新規作成]で DialogBoxを作成します。
    Combo Box の右端の黒い下矢印マークをクリックすると、高さを調整するマークが表示されます。
    これをドラッグして2行分ぐらいのサイズに設定して下さい。
  2. キャプションとIDを設定して下さい。
    ID キャプション
    IDD_DIALOG1 COMBO Box で選択
    IDC_COMBO1
    IDC_EDIT1
    IDOK OK
    IDCANCEL キャンセル
  3. DlgComb.cpp をフォルダーに格納して[プロジェクト][既存項目の追加]からプロジェクトに追加します。
    DlgComb.cpp のソースコードです。
    コメントの部分を埋めてプログラムを完成させて下さい。
    /*****************************************************************/
    /*★ Combo Box で選択した都市を Edit Box で表示する    前田 稔 ★*/
    /*****************************************************************/
    #include <windows.h>
    #include "resource.h"
    
    //Combo Box Table
    LPCTSTR table[]=
    {   "大阪",  "神戸",  "奈良",  "京都",  "和歌山",  "大津",  "三重"  };
    
    char    str[16];
    int     item;
    
    LRESULT CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
    
    //★ Windows Main 関数
    int WINAPI WinMain(HINSTANCE hIns, HINSTANCE hPrevInst,
                       LPSTR lpsCmdLine, int nCmdShow)
    {   DialogBox(hIns,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)DlgProc);
        return TRUE;
    }
    
    //★ Dialog Box の CALLBACK 関数
    LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
    {   int i;
    
        switch (msg)
        {   case WM_INITDIALOG:
                // table[] に格納されている都市名を Combo Box に登録して下さい。
                break;
            case WM_COMMAND:
                switch (LOWORD(wp))
                {   case IDOK:
                        // Combo Box で選択されているアイテム番号を item に取得します。
                        // item 番号で示すアイテムの TEXT を str[] に取得します。
                        // str[] を Edit Box に表示します。
                        break;
                    case IDCANCEL:
                        EndDialog(hDlg,TRUE);
                        break;
                    default:
                        return FALSE;
                }
                break;
            case WM_CLOSE:
                EndDialog(hDlg,TRUE); 
                return TRUE;
        }
        return FALSE;
    }
        
  4. [デバッグ]を選択してビルドに続いて実行を行います。
    Combo Box から都市名を選択して [OK] をクリックすると Edit Box に表示されたら完成です。

【NOTE】

  1. Combo Box にアイテムを登録するには CB_INSERTSTRING を使います。
    第3引数が追加する位置で、第4引数が TEXT を格納した文字列の領域です。
    SendMessage(GetDlgItem(hDlg,IDC_COMBO1),CB_INSERTSTRING,(WPARAM)i,(LPARAM)table[i]);
  2. Combo Box に表示するアイテムの番号を設定するには CB_SETCURSEL を使います。
    SendMessage(GetDlgItem(hDlg,IDC_COMBO1),CB_SETCURSEL,(WPARAM)item,0L);
  3. 現在位置付けられているアイテム番号を調べるには CB_GETCURSEL を使います。
    第3引数、第4引数にはゼロを指定して下さい。
    関数の戻り値がアイテム番号です。
    item = (int)(DWORD)SendMessage(GetDlgItem(hDlg,IDC_COMBO1),CB_GETCURSEL,0L,0L);
  4. カーソルが設定されているアイテム TEXT の取得には CB_GETLBTEXT を使います。
    第3引数がアイテム番号で、第4引数が TEXT を格納する文字列の領域です。
    SendMessage(GetDlgItem(hDlg,IDC_COMBO1),CB_GETLBTEXT,(WPARAM)item,(LPARAM)str);

プログラムの説明

  1. 最初に登録する都市名のテーブルです。
    LPCTSTR は、最後が '\0' で終わる文字列のポインタです。
        LPCTSTR table[]=
        {   "大阪",  "神戸",  "奈良",  "京都",  "和歌山",  "大津",  "三重"  };
        
  2. WM_INITDIALOG: で Combo Box に最初の名簿を登録します。
    (WPARAM)i が追加挿入位置で (LPARAM)table[i] が登録する都市名です。
    最後に先頭のアイテムにカーソルを位置付けます。
        switch (msg)
        {   case WM_INITDIALOG:
                for(i=0; i<7; i++)
                    SendMessage(GetDlgItem(hDlg,IDC_COMBO1),CB_INSERTSTRING,(WPARAM)i,(LPARAM)table[i]);
                SendMessage(GetDlgItem(hDlg,IDC_COMBO1),CB_SETCURSEL,(WPARAM)0L,0L);
                break;
         
  3. IDOK: で Combo Box で選択された都市名を Edit Box に表示します。
    item にカーソルが設定されているアイテム番号を取得します。
    アイテム番号(item) の示す TEXT を str に格納します。
    str の TEXT を Edit Box に表示します。
        switch (LOWORD(wp))
        {   case IDOK:
                item = (int)(DWORD)SendMessage(GetDlgItem(hDlg,IDC_COMBO1),CB_GETCURSEL,0L,0L);
                SendMessage(GetDlgItem(hDlg,IDC_COMBO1),CB_GETLBTEXT,(WPARAM)item,(LPARAM)str);
                SetDlgItemText(hDlg,IDC_EDIT1,str);
                break;
        

【演習】

Combo Box からイニシャル(MM)を選択(入力)して、フルネーム(Maeda Minoru)を表示するプログラムを作成して下さい。
イニシャルに対応するフルネームは、テーブルとして定義しておきます。

超初心者のプログラム入門(Win32API C++)