コンボボックスの文字列を全てを送るには? – プログラミング – Home

コンボボックスの文字列を全てを送るには...
 
通知
すべてクリア

コンボボックスの文字列を全てを送るには?


hiro
 hiro
(@hiro)
ゲスト
結合: 24年前
投稿: 40
Topic starter  

hiroといいます。初心者ですがよろしくお願いします。

MFCでダイアログのボタンを押したら、プロパティページが新しく表示されるものをつくっています。

最初のダイアログのコンボボックスの中にある文字列全てを次のプロパティページのコンボボックスに
コピーしたいのですが、うまくいきません。

やりたいことは
・GetCountでダイアログのコンボボックスの項目数を調べる
・プロパティシートのコンボボックスにコピーする
・DoModal()でプロパティシートを呼び出す。
といったことなのですがうまくいきません。どうか教えてください。

それと、メンバ変数以外の変数や文字列、配列などををDoModal()で他のページへ送るのはどうすれば
よいのですか?

//こんな感じのものを作って動きませんでした。
//最初のダイアログ
cnt = m_combo1.GetCount();
sheet1.combo2.ResetContent(); // プロパティシートのコンボボックス全項目削除
for (i=0; i<cnt ; i++)
{
  sheet1.m_comb2.InsertString(-1,m_combo1[i]); // combo設定
}
ret = sheet1.DoModal(); // プロパティシートを呼ぶ


引用解決済
トピックタグ
CdS
 CdS
(@CdS)
ゲスト
結合: 24年前
投稿: 176
 

DoModalする前にはコンボボックスは作成されていないのでInsertStringすることはできません。
ASSERTが出てるんじゃないでしょうか?

sheet1のメンバ変数にコンボボックスのポインタを宣言しておいて、m_combo1のポインタを渡す。
で、sheet1のOnInitDialogでInsertStringすればいいと思います。
もしくはsheet1のOnInitDialogでGetParentすれば親ダイアログのポインタは取得できるので
m_combo1にアクセスできます。


返信引用
hiro
 hiro
(@hiro)
ゲスト
結合: 24年前
投稿: 40
Topic starter  

Cdsさんありがとうございます。
まだよくわからないので教えていただけませんか?

>もしくはsheet1のOnInitDialogでGetParentすれば親ダイアログのポインタは取得できるので
>m_combo1にアクセスできます。

[親ウィンドウ]-[プロパティーシート]-[プロパティーページ]
で[プロパティーページ]のOnInitDialog()で次のようにしたいのですが、
m_combo1にアクセスできません(方法がわかりません)。ご指導お願いします。

//[プロパティーページ]のOnInitDialog()。このようなイメージ・・・にしたい。

CWnd* OyaWnd = GetParent(); // 親ウィンドウのポインタを取得
CComboBox* pOyaCB1=(CComboBox*)GetDlgItem(IDC_COMBO1); //?親画面のコンボ?
cnt = m_combo1.GetCount(); //?親画面のコンボの項目数?

int i;
CComboBox* pCB1=(CComboBox*)GetDlgItem(IDC_COMBO2); //[プロパティーページ]のコンボ

pCB1->ResetContent(); // コンボボックス全項目削除
for (i=0; i<cnt ; i++)
{
pCB1->InsertString(-1,pOyaCB1[i]); // コンボボックス設定
}


返信引用
CdS
 CdS
(@CdS)
ゲスト
結合: 24年前
投稿: 176
 

  CComboBox *pCombo1 = (CComboBox *)(GetParent()->GetDlgItem(IDC_COMBO1));

です。
親子関係はきちんと理解してください。
Spy++などで確認してみてください。


返信引用
hiro
 hiro
(@hiro)
ゲスト
結合: 24年前
投稿: 40
Topic starter  

Cdsさんありがとうございます。
実は上記のことまでは調べてわかったのですが、GetCount()のところで、エラーがでて
悩んでおります。今調べていたのですがわかりません。これはどうしたらよいのでしょうか?

//エラー
ハンドルされていない例外はXXX.exeにあります・・・
{ ASSERT(::IsWindow(m_hWnd)); return (int)::SendMessage(m_hWnd, CB_GETCOUNT, 0, 0); }

それに、最後のInsertStringの第2引数をいろいろ試してみたのですがダメです。
この場合どうかけばいいのでしょうか?

//コード
CWnd* OyaWnd = GetParent(); // 親ウィンドウのポインタを取得
CComboBox *pOyaCB1=(CComboBox*)OyaWnd->GetDlgItem(IDC_COMBO1);
  cnt = pOyaCB1->GetCount(); // 親ウィンドウのコンボボックスの項目数取得
CComboBox* pCB1=(CComboBox*)GetDlgItem(IDC_COMBO2); // 子ウィンドウのコンボ
pCB1->ResetContent(); // コンボボックス全項目削除
for (i=0; i<cnt ; i++)
{
pCB1->InsertString(-1, , )   //?????
}


返信引用
CdS
 CdS
(@CdS)
ゲスト
結合: 24年前
投稿: 176
 

IDC_COMBO1って本当に親にありますか?
pOyaCB1がヌルポインタになっているのでASSERTが出ています。
デバッガで調べましょう。
親の親ではないはずですが。
とにかくSpy++で親子関係を調べてください。

>それに、最後のInsertStringの第2引数をいろいろ試してみたのですがダメです。
>この場合どうかけばいいのでしょうか?
だめと言われても...。
普通に文字列を入れればいいだけですけど。
とりあえずAddStringでもいいのではないでしょうか。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました