ダイアログ上のコントロールへのアクセス

ダイアログ上のコントロールへのアクセスは至って簡単です。
リソースでダイアログを作った場合の話ですが・・・

なにも考えない方法

たとえばコンボボックスがある場合で、IDを"IDC_COMBO1"とした場合
  CComboBox *lpcBox = (CComboBox*)m_eDialog.GetDlgItem( IDC_COMBO1 );
で、コンボボックスのポインタを取得できます。
あとは、
  lpcBox->AddString("テスト");
という具合に適当に処理しましょう。

モーダルダイアログの場合

モーダルダイアログにデータを渡す側は、まず、CDialogの継承クラスのオブジェクトを作成します。
そして、渡すデータを用意して、データを渡します。
取りあえず、CListCtrlのアイテムの情報をダイアログのCComboBoxに渡すとします。

モーダルダイアログにリストを渡す
CHogeDlg.h

class CHogeDlg : public CDialog{
// コンストラクション
public:
    CHogeDlg(CWnd* pParent = NULL);   // 標準のコンストラクタ
    CString pszRetText;               // Viewで値を取得するためのメンバ関数  (1)
    CComboBox m_cBoxBase;             // ダミーのComboBox
・・・
}


CHogeDlg.cpp CEnsureVisible::CEnsureVisible(CWnd* pParent /*=NULL*/) //: CDialog(CEnsureVisible::IDD, pParent) : CDialog(IDD_DIALOG1, pParent){ //ComboBoxのオブジェクトを作成 (2) m_cBoxBase.Create(0, CRect(0,0,100,10), pParent, 0); } ・・・ BOOL CEnsureVisible::OnInitDialog() { CDialog::OnInitDialog(); CString cText; //ダイアログのコンボボックスを取得 (3) CComboBox *lpcBox = (CComboBox*)GetDlgItem( IDC_COMBO1 ); //コンボボックスにアイテムを登録していく (4) for(int i = 0; i < m_cBoxBase.GetCount(); i++){ m_cBoxBase.GetLBText(i, cText); lpcBox->AddString(cText); } return TRUE; } ・・・ void CEnsureVisible::OnSelchangeCombo1() { //Dialogのコンボボックスを取得 CComboBox *lpcBox = (CComboBox*)GetDlgItem( IDC_COMBO1 ); //選択された文字列を取得する (5) lpcBox->GetLBText(lpcBox->GetCurSel(), pszRetText); }
CHogeHogeCtrlView.cpp void CHogeHogeCtrlView::OnHoge(){ //ダイアログのオブジェクト作成 (6) CHogeDialog HogeDlg(this); //CListCtrlのリストの内容を渡す LVITEM lvItem; _TCHAR m_szBuff[MAX_PATH]; int cnt = m_tlist.GetItemCount(); for (int i = 0; i < cnt; i++){ lvItem.mask = LVIF_TEXT; lvItem.iItem = i; lvItem.iSubItem = 0; lvItem.pszText = m_szBuff; lvItem.cchTextMax = sizeof(m_szBuff); m_tlist.GetItem(&lvItem); //ダイアログのダミーコンボボックスに登録する (7) HogeDlg.m_cBoxBase.AddString(lvItem.pszText); } //OKが押されてダイアログが閉じられたらデータを取得 (8) if(HogeDlg.DoModal() == IDOK){ //コンボボックスで選択された文字列を取得 CString msg = HogeDlg.pszRetText; //取得した文字列を表示する MessageBox(msg,"",MB_OK); } }
とりあえずサンプルソースを載せました。
ClassWizardでつけられるコメントやいらない部分は省略して載せています。

()内の番号順に説明します。

(1) View で値を取得するために Public なメンバ変数を定義しておく。
  ここで定義された変数が後に役に立つ。

(2) View で CombBox に項目を追加したいので ComboBox のオブジェクトを作成する。
  この ComboBox のオブジェクトは Public なメンバ変数として定義している。

(3) ComboBox のオブジェクトのポインタを取得しておく。このポインタはメンバ変数のもの
  ではなく、 Dialog に設定されている ComboBox のオブジェクトのポインタである。

(4) (3)で取得したポインタを利用して、メンバ変数の ComboBox の項目を追加していく。
  ComboBox を Public なメンバ変数で定義していたのはこのため。

(5) Dialog に設定されている ComboBox オブジェクトから選択された文字列を
  Public なメンバ変数に格納しておく。
  これは View でこの値を取得したいため。

(6) Dialog オブジェクトを作成します。親は現在の View を指定しています。

(7) Dialog の Public なメンバ変数 m_cBoxBase に項目を追加しておきます。
  この作業は、(4)の為の準備です。
  Dialog に設定してある ComboBox に項目を追加する場合、直接追加することが
  できない(できなかった)ので、Dialog のメンバ変数にダミーの ComboBox を定義して
  それを利用して Dialog に設定してある ComboBox に項目を取得します。

(8) Dialog オブジェクトの Public なメンバ変数から選択された値を取得します。
  ここで取得される値は、 (5) で取得した値になります。